5

R 的data.table包提供了基于键的快速子集值。

因此,例如:

set.seed(1342)

df1 <- data.table(group = gl(10, 10, labels = letters[1:10]),
                  value = sample(1:100))
setkey(df1, group)

df1["a"]

将返回 df1 中 group == "a" 的所有行。

如果我想要df1where 中的所有行怎么办group != "a"。是否有简洁的语法使用data.table

4

2 回答 2

8

我想你回答了你自己的问题:

> nrow(df1[group != "a"])
[1] 90
> table(df1[group != "a", group])

 a  b  c  d  e  f  g  h  i  j 
 0 10 10 10 10 10 10 10 10 10 

对我来说似乎很简洁?

来自 MATTHEW 的编辑:根据评论,这是一个矢量扫描。这里这里有一个不加入习语 ,并且功能请求#1384使它更容易。

编辑:功能请求 #1384在 data.table 1.8.3 中实现

df1[!'a']

# and to avoid the character-to-factor coercion warning in this example (where
# the key column happens to be a factor) :
df1[!J(factor('a'))]
于 2012-04-03T15:55:29.947 回答
1

我只会得到所有不是“a”的键:

df1[!(group %in% "a")]

这能达到你想要的吗?

于 2012-04-03T15:53:17.093 回答