【问题标题】:Paste name of new columns when summarizing data.table [duplicate]汇总data.table时粘贴新列的名称[重复]
【发布时间】:2018-01-08 20:20:58
【问题描述】:

如何总结一个data.table创建名称来自字符串或字符的新列?

可重现的例子:

library(data.table)

dt <- data.table(x=rep(c("a","b"),20),y=factor(sample(letters,40,replace=T)), z=1:20)

i <- 15
new_var <- paste0("new_",i)

# my attempt
dt[, .( eval(new_var) = sum( z[which( z <= i)] )), by= x]

# expected result
dt[, .( new_15 = sum( z[which( z <= i)] )), by= x]

>    x new_15
> 1: a    128
> 2: b    112

这种使用eval() 的方法可以很好地使用:= (see this SO questions) 创建一个新列,但我不知道为什么它在汇总data.table 时不起作用。

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    一个选项是setNames

    dt[, setNames(.(sum( z[which( z <= i)])), new_var) , by= x]
    #   x new_15
    #1: a    128
    #2: b    112
    

    【讨论】:

    • 感谢@akrun 的回复,当我只总结一栏时,它的效果非常好。但是,当我尝试同时汇总更多列时,它不起作用。例如:dt[, .( other_var = mean(z) , setNames( sum( z[which( z &lt;= i)]), new_var)) , by= x]
    • @rafa.pereira 你需要把setNames放在.(之外
    猜你喜欢
    • 2020-09-14
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 2013-05-07
    • 2019-11-18
    • 1970-01-01
    • 2015-05-24
    相关资源
    最近更新 更多