r - 当新列名作为字符向量给出时,将数据分组到 `data.table` 中的好方法

标签 r data.table

换句话说,当新列的名称是字符向量时,我的问题是关于 data.tablej 参数。例如:

dt <- data.table(x = c(1, 1, 2, 2, 3, 3), y = rnorm(6))
agg_col_name <- 'avg'

grouped_dt <- dt[, .(z = mean(y)), by = x]
setnames(grouped_dt, 'z', agg_col_name)
> grouped_dt
   x        avg
1: 1 -0.2554987
2: 2 -0.4245852
3: 3 -0.4881073

应该有一种更优雅的方式将最后两个语句作为一个语句,是吗?

也许这是一个关于如何为 j 参数创建合适的 list 的问题。

最佳答案

虽然可能不是你要找的东西,但你可以在里面使用 setNames,它环绕着 (.(z = mean(y))

library(data.table)

dt[, setNames(.(z = mean(y)), agg_col_name), by = x]

或者在做总结后使用setnames:

setnames(dt[, mean(y), by = x], 'V1', agg_col_name)[]

输出

   x        avg
1: 1  0.5626526
2: 2  0.3549653
3: 3 -0.2861405

但是,如评论中所述,使用 data.table 的开发版本更容易。您可以在 [programming on data.table #4304]:( https://github.com/Rdatatable/data.table/pull/4304 ) 查看有关此功能开发的更多信息。

# Latest development version:
data.table::update.dev.pkg()

library(data.table)

dt[, .(z = mean(y)), by = x, env = list(z=agg_col_name)]

#   x        avg
#1: 1 -0.1640783
#2: 2  0.5375794
#3: 3  0.1539785

关于r - 当新列名作为字符向量给出时,将数据分组到 `data.table` 中的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72158933/

相关文章:

r - 如何计算由离散数据定义的曲面下的体积?

r - 表格的data.table 与表格的data.frame 有很大不同

R 数据表 - 创建一个新列,其中每个元素都是一个值列表

R:设置初始条件的for循环的dplyr解决方案

r - 按特定评级的最高值对堆叠条进行排序

r - 不要使用 data.table 自动返回按列

r - R中wt()函数在哪里

r - 如何合并 column1 是 column2 的子字符串的数据框

r - 使用 data.table 更新按行相互依赖的两列

r - 有效地组合几个 dcast data.table(共享相同的 key )