当通过id变量- R进行聚合时,如何在data.table的列表变量中追加字符向量

unhi4e5o  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(75)

我有一个大型的data.table对象,其中一个变量是字符向量的列表。我希望通过一个唯一的ID进行聚合,并在此过程中合并与该唯一ID的每一行相关联的所有字符向量。下面是一个简单的可重复示例:

DT <- data.table(ID = c(LETTERS[1:10], LETTERS[1:10]),
                 var = replicate(n = 20,
                                 expr = sample(x = letters, size = 5, replace = F),
                                 simplify = FALSE))
str(DT)

我尝试了aggregate函数和来适应更具体的data.table表示法,聚合函数不能处理列表,我也不能理解列表变量的data.table表示法:

appended <- aggregate(var~ID, data = DT, FUN = "append")
appended <- DT[, .(var=append(var), ID=ID[1]), by="ID"]

理想情况下,我的输出应该具有以下结构:

> str(appended)
Classes ‘data.table’ and 'data.frame':  10 obs. of  2 variables:
 $ ID : chr  "A" "B" "C" "D" ...
 $ var:List of 10
    ..

我不介意每个附加向量(appended$var)中的元素是否重复,但我计划稍后删除每个向量中的重复项,因此如果这是附加/聚合过程的副作用,那么我可以接受。
任何解决方案,甚至只是链接到特定的文档在这个案件,我还没有找到?

yhuiod9q

yhuiod9q1#

您可以将append()与Reduce()一起使用:

DT[, .(list(var = Reduce(append, var))), by = ID]

但我建议用unlist()代替:

DT[, .(list(var = unlist(var))), by = ID]

相关问题