1

我在 R 中有一个具有重复列名的数据框,当我使用子集从此数据框中选择特定列时,它会重命名重复项,使它们不同。当我使用函数 data.frame() 创建数据框时,我可以通过使用参数 check.names = FALSE 来阻止这种情况的发生,有没有办法我也可以使用子集(或任何其他选择名称列的方式)来做到这一点.

例如说我有数据框

data <- data.frame('sample' = 50, 'x_mean' = 1.5, 'Lower CI' = 1.0, 'Upper CI' = 2.0, 'sample' = 50, 'y_mean' = 0.6, 'Lower CI' = 0.3, 'Upper CI' = 0.9, check.names = FALSE)

selectVec <- c(TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE)

使用代码

subset(data, select = selectVec)

将重复的置信区间重命名为“Lower CI.1”和“Upper CI.1”,而我想将它们保留为“Lower CI”和“Upper CI”。有谁知道这样做的方法?

提前致谢。

4

2 回答 2

3

看起来你会得到相同的行为[。我能想到的唯一方法是事后重新分配名称:

subdata <- data[, selectVec, drop = FALSE]
names(subdata) <- names(data)[selectVec]

但是,请注意,使用重复的列名是一种非常不自然、复杂(显然)且有风险的保存数据的格式。我会尝试理解为什么文件或 data.frame 首先有重复的列并在那里修复它。

于 2012-11-16T11:31:50.587 回答
1

此方法将避免传递它[.data.frame,然后需要重新分配名称。数据框是列表,逻辑索引与它们的工作方式与处理数据框列的方式相同。

    data.frame(as.list(data)[ selectVec ], check.names=FALSE )
#  sample x_mean Lower CI Upper CI y_mean Lower CI Upper CI
#1     50    1.5        1        2    0.6      0.3      0.9
于 2012-11-16T22:43:46.760 回答