[英]aggregate in j column to string column name, data.table
我正在嘗試使用j列創建一個匯總的data.table,但是將其分配給存儲在變量中的名稱。
例如,我可以這樣做:
x = data.table(c(1,2,3,4,5,6),c(2,2,2,3,3,3))
x[,.("a" = mean(V1), "b" = max(V1)),by=V2]
根據需要返回
V2 a b
1: 2 2 3
2: 3 5 6
現在,我不想使用名稱“ a”,而是要使用變量名稱:
varname = "a"
x[,.(varname = mean(V1), "b" = max(V1)), by=V2]
我希望它返回相同的輸出,但是當然這里a列被標記為“ varname”。 我試過使用eval,get和其他方法,但沒有弄清楚正確的語法。 這是內置的,還是我必須在data.table之外重新標記名稱?
我們可以在聚合后使用setnames
out <- x[,.( mean(V1), "b" = max(V1)), by=V2]
setnames(out, 'V1', varname)
out
# V2 a b
#1: 2 2 3
#2: 3 5 6
或使用setNames
x[, setNames(.(mean(V1), max(V1)), c(varname, "b")), by = V2]
使用tidyverse
,可以進行lhs
評價
library(tidyverse)
x %>%
group_by(V2) %>%
summarise(!! varname := mean(V1))
# A tibble: 2 x 2
# V2 a
# <dbl> <dbl>
#1 2 2
#2 3 5
或者,您可以將函數放入命名列表,如下所示:
x[, lapply(structure(list(mean, max), names=c(varname, "b")),
function(f) f(V1)),
by=V2]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.