【发布时间】:2020-08-19 11:20:21
【问题描述】:
我想对data.table 进行分组,但在最终输出中为分组变量使用不同的名称。
数据
library(data.table)
set.seed(1)
d <- data.table(grp = sample(4, 100, TRUE))
选项
我可以像这样使用链接:
d[, .(Frequency = .N), keyby = grp][
, .("My Fancy Group Name" = grp, Frequency)]
# My Fancy Group Name Frequency
# 1: 1 27
# 2: 2 31
# 3: 3 22
# 4: 4 20
或重命名之前的列:
d[, c("My Fancy Group Name" = list(grp), .SD)][
, .(Frequency = .N), keyby = "My Fancy Group Name"]
# My Fancy Group Name Frequency
# 1: 1 27
# 2: 2 31
# 3: 3 22
# 4: 4 20
或者为分组变量定义一个别名,然后删除分组变量:
d[, .("My Fancy Group Name" = grp, Frequency = .N), keyby = grp][
, grp := NULL][]
# My Fancy Group Name Frequency
# 1: 1 27
# 2: 2 31
# 3: 3 22
# 4: 4 20
但所有形式都使用链。
我可以避免the not recommended approach from here 的链接(这不仅是一种黑客行为,而且效率非常低):
d[, .("My Fancy Group Name" = .SD[, .N, keyby = grp]$grp,
Frequency = .SD[, .N, keyby = grp]$N)]
# My Fancy Group Name Frequency
# 1: 1 27
# 2: 2 31
# 3: 3 22
# 4: 4 20
问题
从概念上讲,我想使用这样的东西
# d[, .(Frequency = .N), keyby = c("My Fancy Group Name" = grp)]
- 是否可以不使用我展示的 hack 来实现解决方案链免费?
- 如果我们有一个巨大的
data.table,哪个选项在内存/时间方面表现“最佳”?
【问题讨论】:
标签: r data.table