【发布时间】:2020-02-14 20:29:30
【问题描述】:
这是Collapse / concatenate / aggregate a column to a single comma separated string within each group的扩展
目标:根据一个分组变量聚合多个列,并通过选择的分隔符分隔各个值。
可重现的例子:
data <- data.frame(A = c(rep(111, 3), rep(222, 3)), B = c(rep(c(100), 3), rep(200,3)), C = rep(c(1,2,NA),2), D = c(15:20), E = rep(c(1,NA,NA),2))
data
A B C D E
1 111 100 1 15 1
2 111 100 2 16 NA
3 111 100 NA 17 NA
4 222 200 1 18 1
5 222 200 2 19 NA
6 222 200 NA 20 NA
A 是分组变量,但 B 仍显示在整体结果中(B 取决于我的应用程序中的 A),C、D 和 E 是要折叠成单独的 character 字符串的变量。
期望的输出
A B C D E
1 111 100 1,2 15,16,17 1
2 222 100 1,2 18,19,20 1
我在 R 方面没有丰富的经验。我确实尝试扩展 G. Grothendieck 发布到链接帖子的解决方案以满足我的要求,但不能完全正确地处理多个列。
获得所需输出的正确实现是什么?
我在尝试中特别关注group_by、summarise_all 和aggregate。它们完全是一团糟,所以我认为展示它甚至没有帮助。
编辑: 发布的解决方案非常适合显示所需的结果! 继续为那些找到它的人提高这篇文章的价值。
用户如何选择自己的分隔符。
例如'-', '\n'
@akrun 和 @tmfmnk 当前的解决方案都导致列表而不是串联的 character 字符串。如果我说错了,请纠正我。
data$D
[1] 15 16 17 18 19 20
> data$A
[1] 111 111 111 222 222 222
> data$B
[1] 100 100 100 200 200 200
> data$C
[1] 1 2 NA 1 2 NA
> data$D
[1] 15 16 17 18 19 20
> data$E
[1] 1 NA NA 1 NA NA
【问题讨论】:
-
不确定你最后的意思,因为他们的答案似乎都给出了字符串,只是字符串中带有逗号。如果您想尝试不同的分隔符或有一些用户界面,您可以将变量作为折叠参数传递给
paste或str_c。除此之外,this 或它链接到的帖子应该让你从做一个摘要列到一次做多个 -
嗨,Camille,我试图将数据传递给 DT 的数据表。但是,每次出现仍然会导致一行,但这可能是 DT 特有的问题。我记得在某个时候看到有人发布了一个关于导出为 csv 与 pdf 及其所需格式的问题。即使它在控制台中正确输出,格式仍然不同。