gpt4 book ai didi

r - 按组值的 SD 列的数据表字符串串联

转载 作者:行者123 更新时间:2023-12-04 23:44:57 25 4
gpt4 key购买 nike

我有一个大数据集,其中包含许多与此类似的变量:

 > data.table(a=letters[1:10],b=LETTERS[1:10],ID=c(1,1,1,2,2,2,2,3,3,3))
a b ID
1: a A 1
2: b B 1
3: c C 1
4: d D 2
5: e E 2
6: f F 2
7: g G 2
8: h H 3
9: i I 3
10: j J 3

我想为每个 ID 值连接(在它们之间使用换行符)除 ID 之外的所有列值,因此结果应如下所示:
     a b ID
1: a A 1
b B
c C
2: d D 2
e E
f F
g G
3: h H 3
i I
j J

我找到了一个链接 R Dataframe: aggregating strings within column, across rows, by group其中讨论了如何为一列执行此操作,如何为 .SD 中的所有列扩展此操作?

为了清楚起见,我将分隔符从 \n 更改为至 ,结果应该是这样的:
   a       b       ID
1: a,b,c A,B,C 1
2: d,e,f,g D,E,F,G 2
3: h,i,j H,I,J 3

最佳答案

您可以使用 lapply 连接所有列.

dt[, lapply(.SD, paste0, collapse=" "), by = ID]
## ID a b
## 1: 1 a b c A B C
## 2: 2 d e f g D E F G
## 3: 3 h i j H I J

使用换行符作为 ollapse 参数而不是 " "确实有效,但不会像您期望的输出那样打印。
dt[, lapply(.SD, paste0, collapse="\n"), by = ID]
## ID a b
## 1: 1 a\nb\nc A\nB\nC
## 2: 2 d\ne\nf\ng D\nE\nF\nG
## 3: 3 h\ni\nj H\nI\nJ

正如@Frank 在评论中指出的那样,问题已更改为 ,作为分隔符而不是 \n .当然,您可以更改 collapse论据 "," .如果你也想有一个空间 ", " ,那么 @DavidArenburg 的解决方案是可取的。
dt[, lapply(.SD, paste0, collapse=","), by = ID]
dt[, lapply(.SD, toString), by = ID]

关于r - 按组值的 SD 列的数据表字符串串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30620877/

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