我有一个要拆分为两个的data.table。我这样做如下:

dt <- data.table(a=c(1,2,3,3),b=c(1,1,2,2))
sdt <- split(dt,dt$b==2)

但是如果我想下一步做类似的事情
sdt[[1]][,c:=.N,by=a]

我收到以下警告消息。



只是想知道是否有更好的方法来拆分表,以便提高效率(并且不会收到此消息)?

最佳答案

这可以在v1.8.7中运行(并且也可以在v1.8.6中运行):

> sdt = lapply(split(1:nrow(dt), dt$b==2), function(x)dt[x])
> sdt
$`FALSE`
   a b
1: 1 1
2: 2 1

$`TRUE`
   a b
1: 3 2
2: 3 2

> sdt[[1]][,c:=.N,by=a]     # now no warning
> sdt
$`FALSE`
   a b c
1: 1 1 1
2: 2 1 1

$`TRUE`
   a b
1: 3 2
2: 3 2

但是,就像@mnel所说的那样,效率很低。请尽可能避免 split 。

关于r - 拆分数据表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14977997/

10-12 17:23