我有一个要拆分为两个的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/