在R中进行子集化时保留重复的列名称

时间:2012-11-16 11:04:51

标签: r duplicates subset

我在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'。有谁知道这样做的方法?

提前致谢。

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分: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