【问题标题】:create a new column in a data.table from group by multiple columns在 data.table 中按多列分组创建一个新列
【发布时间】:2017-09-09 20:41:42
【问题描述】:

我正在处理一个包含 X 和 Y 列的 data.table,我想创建一个新列 Z,它是具有相同 (X, Y) 值的所有记录的数量。

我知道使用 data.frame 时的语法:

ddply(df,.(X,Y),nrow)

我测试了我在这个论坛上找到的不同语法,但它们不起作用:

dt[, Z := lapply(.SD,nrow), by="X,Y"] # or   
dt[, `:=`(Z = lapply(.SD,nrow)), by="X,Y"]   

我精确的 X 和 Y 是数字。

【问题讨论】:

    标签: r data.table plyr


    【解决方案1】:

    library(data.table)
    dt <- data.table(X = c(1, 1, 2), Y = c(1, 1, 2))
    

    适当的语法是

    dt[, Z := .N, by = c("X","Y")]
    

    dt[, Z := .N, by = .(X,Y)]
    

    【讨论】:

    • 我收到错误 `[.data.table`(dt, , `:=`(Z, .N), : Type of RHS ('integer') must match LHS ('list' ). 对于最快的情况,检查和强制对性能影响太大。要么更改目标列的类型,要么自己强制 := 的 RHS(例如,使用 1L 而不是 1)错误消息
    • 您已经有一个名为 Z 的列,具有不同的数据类型。如果您不需要它,请先尝试使用 dt[, Z := NULL] 删除 Z。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 2012-11-13
    • 1970-01-01
    • 2021-05-14
    • 2012-07-25
    • 2020-01-23
    • 2017-04-02
    相关资源
    最近更新 更多