R 按组值的SD列的数据表字符串连接
我有一个包含许多变量的大数据集,这些变量类似于:R 按组值的SD列的数据表字符串连接,r,data.table,R,Data.table,我有一个包含许多变量的大数据集,这些变量类似于: > 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之外
> 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
我找到了一个链接,其中讨论了如何为一个列执行此操作,如何为.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
您可以使用
lappy
连接中的所有列
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]
您想要的输出不清楚。David-我更改了我原来的问题以使想要的输出清晰OP将折叠字符更改为逗号
toSTring
then;)dt[,lappy(.SD,toString),by=ID]
。很高兴看到shadow终于发布了一些数据。table也是解决方案,而不仅仅是dplyr
:)David和Frank-感谢您的解决方案,它们非常有用。在lapply中,我们可以使用cat
和paste
在串联的值之间使用\n
字符来获得所需的结果吗?我认为这是不可能的。但是如果你想确认(或者最好不要确认),我会问一个新问题。shadow-谢谢,这是我最初的问题和期望的输出,我将分隔符改为,
,以回应David关于期望的输出不清楚的评论,我会进一步研究-再次感谢