我有一个数据集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
中提到的列?
答案 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"))]