【问题标题】:create column in datatable depending on it's values根据其值在数据表中创建列
【发布时间】:2018-02-20 23:56:38
【问题描述】:

我在数据表中有单列

library(data.table)

DT <- data.table(con=c(1:5))

我的结果是一个数据表,其中新列 x 计算如下:第一个值应该是 con(here:1) 的第一个值,下一个(第二个)值应该通过将 con 的第二个值乘以 x 的第一个值来计算. x 的第三个值是 con 的第三个值乘以 x 的第二个值的结果,依此类推。结果:

 DT <- data.table(con=c(1:5), x = c(1,2,6,24,120))

我尝试使用轮班,但在我的代码的某些行下面没有帮助:

DT <- data.table(con=c(1:5))
DT[, x := shift(con,1, type = "lead")]
DT[, x := shift(x, 1)]
DT[, x := con * x]

【问题讨论】:

    标签: r data.table data-manipulation shift


    【解决方案1】:

    您正在寻找cumprod

    DT[,x:=cumprod(con)]
    DT
       con   x
    1:   1   1
    2:   2   2
    3:   3   6
    4:   4  24
    5:   5 120
    

    【讨论】:

      【解决方案2】:

      我们可以使用 包中的accumulate 函数。

      library(data.table)
      library(purrr)
      
      DT <- data.table(con=c(1:5))
      DT[, x := accumulate(con, `*`)][]
      #    con   x
      # 1:   1   1
      # 2:   2   2
      # 3:   3   6
      # 4:   4  24
      # 5:   5 120
      

      或者来自基础 R 的 Reduce 函数。

      DT <- data.table(con=c(1:5))
      DT[, x:= Reduce(`*`, con, accumulate = TRUE)][]
      #    con   x
      # 1:   1   1
      # 2:   2   2
      # 3:   3   6
      # 4:   4  24
      # 5:   5 120
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-03
        • 2021-09-15
        • 2021-08-27
        • 1970-01-01
        • 2020-04-12
        • 1970-01-01
        • 2023-01-24
        • 1970-01-01
        相关资源
        最近更新 更多