代码之家  ›  专栏  ›  技术社区  ›  Neal Barsch

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

  •  1
  • Neal Barsch  · 技术社区  · 6 年前

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

    我想能按大约的比例把代码分开。50000 cumsum的n,生成不同行长度的data.tables,但具有总计约50000的唯一代码。

    实际上,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 回复  |  直到 6 年前
        1
  •  2
  •   akrun    6 年前

    %/%

    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