簡體   English   中英

一次在data.table中動態創建多個列表列

[英]Create multiple list columns dynamically in data.table at once

有沒有一種方法可以一次在data.table創建多個list列?

我使用下面的代碼創建兩個列表列,即c1_list和c2_list,同時按x分組

DT = data.table(x  = c('a','a','b','b'),
            c1 = c(1,2,3,4),
            c2 = c(2,4,6,8))

DT[, .(c1_list = list(c1), c2_list = list(c2)), by = 'x']
#   x c1_list c2_list
#1: a     1,2     2,4
#2: b     3,4     6,8 

相反,我希望有一種動態的快捷方式,例如

注意下面的代碼不起作用-這僅是其外觀的建議

DT[, (c('c1_list', 'c2_list')) = lapply(mget(c('c1','c2')), list), by = 'x']

要么

DT[, lapply(.SD, list), by = 'x', .SDcols = c('c1','c2')] %>%
    setnames(c('c1','c2'), c('c1_list','c2_list')

更新 :正如RyanD指出的,第二個解決方案有效。

你可以做

DT[, lapply(.SD, list), by = x, .SDcols = paste0("c", 1:2)]
#   x  c1  c2
#1: a 1,2 2,4
#2: b 3,4 6,8

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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