我正在尝试从现有的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")
对于如何完成上述工作的任何想法都将不胜感激。
答案 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