按名称查找列索引的有效方法

时间:2017-09-07 18:59:57

标签: r apply

我有一个列名称向量如下:

colsToRemove <- c("CHF", "CAD", "Sex", "Admissions")

我还有一个包含700多列的大型数据框。我想删除名称出现在上面的列名称向量中的列。

我一直在使用一个简单的循环。它在某种程度上起作用,但在没有匹配时出错。偶尔会发生这种情况,原因是变量被转换和重命名。我很好奇是否有更有效的方法来执行此操作,可能使用其中一个应用函数?有没有办法阻止它在遇到不匹配的值时停止?

目前的解决方案:

col_ind <- vector()

for (i in 1:(length(colsToRemove)) {
     col_ind[i] <- grep(colsToRemove[i], colnames(myDF))
}

myDF <- myDF[,-colsToRemove]

提前致谢。

2 个答案:

答案 0 :(得分:3)

Leg

如果您需要删除(regex-)匹配colsToRemove内容的所有列:

myDF[, !colnames(myDF) %in% colsToRemove]

答案 1 :(得分:2)

您也可以使用match()

cols <- c("CHF", "CAD", "Sex", "Admissions")
df <- data.frame(CHF=1, CAD=2, Sex=3, X=5, Admissions=6)
#  CHF CAD Sex X Admissions
#1   1   2   3 5          6
df[,match(cols, names(df))] <- NULL
#  X
#1 5