按R中列的总和拆分data.table

时间:2018-07-16 04:50:28

标签: r split data.table cumsum

如何用相等的N列累加和来拆分data.table?这些数据包括代码,N是每个代码的更大集合中的行数(我在这里没有复制)。

我希望能够用aprox分割代码。 50,000 N的总和,产生不同长度的行的data.tables,但具有唯一的代码,总计约50,000N。

实际上N是随机的,不是随机的,但这在复制较小样本量的数据方面做得很好:

dt <- dt <- data.table(code=c(1:500),N=c(rep(c(100:500),100),rep(c(100:500),100),rep(c(100:500),100), rep(c(100:500),100), rep(c(100:500),100)))
dt$cumsum <- cumsum(dt$N) 
desired1 <- dt[1:233,] ###first 50,000 cumsum of N
desired2 <- dt[234:359,]
desired3 <- dt[360:565,]
desired4 <- dt[566:713,] ###etc every 50,000 cumsum of N

1 个答案:

答案 0 :(得分:2)

我们使用%/%创建一个分组变量以进行拆分。

dt[, grp := shift(cumsum %/% 50000, fill = 0)]

然后执行split

lst <- split(dt, dt$grp)
tail(lst[[1]], 1)
#   code   N cumsum grp
#1:  233 332  50328   0