我在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'。有谁知道这样做的方法?
提前致谢。
答案 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