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

我已经看到了问题/响应here,但是在不使用Error: unexpected '=' in " tbl2 <- tbl1[, .(paste0(prefix, mean_amt) ="运算符的情况下尝试解决该问题。

代表:

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

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

我尝试了以下方法:
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

不幸的是,该代码收到错误消息:ojit_code

任何有关如何使上述工作的想法将不胜感激。

最佳答案

您可以使用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

10-04 17:40