data.table使用变量名称分组

时间:2017-09-06 03:15:49

标签: r data.table

我正在尝试从现有的data.table创建一个汇总的:=,但是我想在允许我传入列前缀的函数中执行此操作,以便根据需要为我的列添加前缀。 / p>

我已经看到了问题/回复here,但我正在尝试在不使用library(data.table) tbl1 <- data.table(urn = c("a", "a", "a", "b", "b", "b"), amount = c(1, 2, 1, 3, 3, 4)) # urn amount # 1: a 1 # 2: a 2 # 3: a 1 # 4: b 3 # 5: b 3 # 6: b 4 tbl2 <- tbl1[, .(mean_amt = mean(amount), rows = .N), by = urn] # urn mean_amt rows # 1: a 1.333333 3 # 2: b 3.333333 3 运算符的情况下解决该问题。

Reprex:

prefix <- "mypfx_"
tbl2 <- tbl1[, .(paste0(prefix, mean_amt) = mean(amount),
                 paste0(prefix, rows) = .N),
             by = urn]

# Desired output
#    urn mypfx_mean_amt mypfx_rows
# 1:   a       1.333333          3
# 2:   b       3.333333          3

这是为正在创建的列名使用固定名称,但是如上所述,我希望能够包含前缀。

我尝试了以下内容:

Error: unexpected '=' in "    tbl2 <- tbl1[, .(paste0(prefix, mean_amt) ="

不幸的是,代码收到错误消息:ClassLoader.getSystemResourceAsStream("Test1.class")

对于如何完成上述工作的任何想法都将不胜感激。

1 个答案:

答案 0 :(得分:3)

您可以使用setNames动态重命名列:

prefix <- "mypfx_"
tbl2 <- tbl1[, setNames(list(mean(amount), .N), paste0(prefix, c("mean_amt", "rows"))), 
               by = urn]

tbl2
#   urn mypfx_mean_amt mypfx_rows
#1:   a       1.333333          3
#2:   b       3.333333          3