簡體   English   中英

在j列中聚合為字符串列名稱data.table

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM