Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 按组值的SD列的数据表字符串连接_R_Data.table - Fatal编程技术网

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关于
期望的输出不清楚的评论,我会进一步研究-再次感谢