【问题标题】:Add two mutated column in a grouping by with data.table [duplicate]使用data.table在分组中添加两个变异列[重复]
【发布时间】:2020-04-16 19:35:18
【问题描述】:

我想向 mtcars 数据集添加两列并保留所有数据 如果我添加一列,它的工作:

dt <- as.data.table(mtcars)

dt[, max_mpg := max(mpg), by = cyl][]

但是当我添加第二列时出现错误:

dt[, list(max_mpg := max(mpg), min_mpg := min(mpg)), by = cyl][]

我想保留所有其他列,类似于 dplyr 中的 mutate 函数

谢谢

【问题讨论】:

  • 这个怎么样:dt[, max_mpg := max(mpg), by = cyl][, min_mpg := min(mpg), by = cyl]?
  • 谢谢,这就是我要找的东西
  • 酷。我已将其添加为答案..

标签: r data.table


【解决方案1】:

更好的是,您可以遵循传统的 data.table 语法并使用

DT[, ":="(max_mpg = max(mpg), min_mpg = min(mpg)), by = cyl]

【讨论】:

    【解决方案2】:

    你可以这样做:

    dt[, max_mpg := max(mpg), by = cyl][, min_mpg := min(mpg), by = cyl]
    head(dt)
    
    #    mpg cyl disp  hp drat    wt  qsec vs am gear carb max_mpg min_mpg
    #1: 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4    21.4    17.8
    #2: 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4    21.4    17.8
    #3: 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1    33.9    21.4
    #4: 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1    21.4    17.8
    #5: 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2    19.2    10.4
    #6: 18.1   6  225 105 2.76 3.460 20.22  1  0    3    1    21.4    17.8
    

    【讨论】:

      【解决方案3】:

      也许这是Assign multiple columns using := in data.table, by group的副本

      但是使用

      dt[ , c("max_mpg", "min_mpg") := list(max(mpg), min(mpg)), by = cyl][]
      

      【讨论】:

        猜你喜欢
        • 2018-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-03
        • 2021-12-05
        • 2012-09-18
        • 2019-09-16
        相关资源
        最近更新 更多