如何按列名删除特定列

时间:2013-12-04 09:44:44

标签: r performance subset

我有一个数据集df,我有300列。我还有一个向量names,它是一个字符向量。我正在尝试删除与names中的字符匹配的列。我试过了

    > head(names)
[1] "X749.-4" "X339"    "X449"    "X486"    "X300"    "X301" 
    real.final<-df[-names]
    Error in -names : invalid argument to unary operator

是否有办法删除names中提到的列?

4 个答案:

答案 0 :(得分:1)

我会改用setdiff。这是一个例子:

## This is head(names)
x <- c("X749.-4", "X339", "X449", "X486", "X300", "X301")

## Imagine this is names(df)
y <- c(letters[1:2], x, LETTERS[1:2])

setdiff(y, x)
# [1] "a" "b" "A" "B"

## So, you could try:
df[, setdiff(y, x)]

答案 1 :(得分:0)

否定运算符“ - ”不适用于作为参数传递给“[”的字符参数。你需要使用带有“!”的lgocal矢量。如user2568648所示,或者您需要使用grep将字符向量转换为数字向量:

#Failed attemtpt : real.final <- df[-grep(names, names(df) )]

也许:

real.final <- df[ -as.vector(sapply(names[1], grep, x=c(names,names)))]

另一个错误:

real.final <- subset( df, select=-names)
Error in -"Result" : invalid argument to unary operator

成功:

 subset(df, select=-which(names(df) %in% names))

我不喜欢使用-which(),因为如果没有“点击”它会咬你,但作为子集的参数它可能是安全的。

答案 2 :(得分:-1)

这会有用吗? [不 - 见以下Dwin的评论进行更正]

    subset.df<-subset(df, !(colnames(df) %in% names))

答案 3 :(得分:-1)

您可以使用哪个功能。例如,删除名为“X749.-4”和“X486”的列:

df <- df[ , -which(names(df) %in% c("X749.-4", "X486"))]