gpt4 book ai didi

r - data.table 聚合到列表列

转载 作者:行者123 更新时间:2023-12-04 11:03:24 24 4
gpt4 key购买 nike

我正在尝试从 data.table 聚合数据以创建一个新列,该列是先前行的列表。通过示例更容易看到:

dt <- data.table(id = c(1,1,1,1,2,2,3,3,3), letter = c('a','a','b','c','a','c','b','b','a'))

我想以这样的方式汇总它,结果应该是
   id  letter
1: 1 a,a,b,c
2: 2 a,c
3: 3 b,b,a

直觉上我试过了
dt[,j = list(list(letter)), by = id]

但这不起作用。奇怪的是,当我逐案处理时,例如:
> dt[id == 1,j = list(list(letter)), by = id]

id V1
1: 1 a,a,b,c

结果很好...我觉得我错过了 .SD某处或类似的东西......

有人能指出我正确的方向吗?

谢谢!

最佳答案

更新:行为DT[, list(list(.)), by=.]有时会导致 R 版本 >= 3.1.0 的错误结果。现在已在 commit #1280 中修复在data.table的当前开发版本中v1.9.3。来自 NEWS :

  • DT[, list(list(.)), by=.] returns correct results in R >=3.1.0 as well. The bug was due to recent (welcoming) changes in R v3.1.0 where list(.) does not result in a copy. Closes #481.


有了这个更新, I() 不需要了了。你可以这样做: DT[, list(list(.)), by=.]像以前一样。

这似乎是与已知的 bug #5585 类似的问题。 .在你的情况下,我认为你可以使用
dt[, paste(letter, collapse=","), by = id] 

解决您的问题。

正如@ilir 指出的那样,如果确实需要获取列表(而不是显示的字符),则可以使用错误报告中建议的解决方法:
dt[, list(list(I(letter))), by = id]

关于r - data.table 聚合到列表列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23288509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com