通过R中的列的cumsum拆分data.table

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过R中的列的cumsum拆分data.table相关的知识,希望对你有一定的参考价值。

如何通过N列的相等累积和来分割data.table?这些数据包括代码,N是每个代码的更大集合中的行数(我在这里没有再现)。

我希望能够通过aprox拆分代码。 5个N的cumsum,产生不同长度行的数据表。但是具有总和约为50,000总N的唯一代码。

实际上,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
答案

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

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

以上是关于通过R中的列的cumsum拆分data.table的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 R 交换 data.table 中的列值

R之data.table 介绍

data.table 分组所有列的总和

Match()和data.table的列的动态选择

根据模式将data.table列拆分为许多未知数量的列

匹配一个变量后,仅将一个变量从一个 R data.table 复制到另一个