【发布时间】:2016-03-18 18:04:18
【问题描述】:
如下图:
df <- data.frame(X1 = rep(letters[1:3],3),
X2 = 1:9,
X3 = sample(1:50,9))
df
ind<- grep("a|c", df$X1)
library(data.table)
df_ac <- df[ind,]
df_b <- df[!ind,]
df_ac 是使用常规的grep 命令创建的。如果我想以相反的方式使用grep:使用X1 == 'b' 选择所有观察值。
我知道我可以这样做:
ind2<- grep("a|c", df$X1, invert = T)
df_b <-df[ind2,]
但是,在我的原始脚本中,为什么命令 df_b <-df[!ind,] 返回一个观察值为零的数据框?
任何人都可以向我解释为什么我的逻辑是错误的?有没有其他方法可以通过反向使用grep 而不指定invert = T 来选择data.frame 中的观察值?谢谢!
【问题讨论】:
-
您确定要使用
grep而不是%in%?此外,如果您想要grep方法,您可能想查看grepl。 -
另外,你为什么在这里加载“data.table”?
-
在您的控制台中执行
!ind,您将看到为什么该表达式返回一个空的data.frame。 -
嗨,我使用“data.table”,因为我的原始数据集很大,我想使用 data.table 来操作我的数据集。我稍微编辑了我的问题。我只想知道为什么我在
data.table中的逻辑不正确。谢谢 -
@nrussell 让我很惊讶,
FALSE!ind。我意识到grep返回数字索引,但!ind是一个逻辑运算符,它永远不会给我想要的东西。我需要改用grepl。非常感谢您的提示!
标签: r data.table