按 R 中列的累积总和拆分 data.table
Split data.table by cumsum of column in R
如何将 data.table 拆分为 N 列的相等累积和?这些数据包括代码,N 是每个代码的更大集合中的行数(我没有在此处复制)。
我希望能够按近似值拆分代码。 N 的 50,000 cumsum,产生 data.table 行的不同长度,但具有总计约 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
如何将 data.table 拆分为 N 列的相等累积和?这些数据包括代码,N 是每个代码的更大集合中的行数(我没有在此处复制)。
我希望能够按近似值拆分代码。 N 的 50,000 cumsum,产生 data.table 行的不同长度,但具有总计约 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