我想根据两个分组变量聚合数据框中的一列,并用逗号分隔各个值。
以下是一些数据:
data <- data.frame(A = c(rep(111, 3), rep(222, 3)), B = rep(1:2, 3), C = c(5:10))
data
# A B C
# 1 111 1 5
# 2 111 2 6
# 3 111 1 7
# 4 222 2 8
# 5 222 1 9
# 6 222 2 10
"A"和"B"是分组变量,"C"是我想折叠成逗号分隔的character
字符串的变量。
library(plyr)
ddply(data, .(A,B), summarise, test = list(C))
A B test
1 111 1 5, 7
2 111 2 6
3 222 1 9
4 222 2 8, 10
但当我尝试将test column转换为character
时,它变成了这样:
ddply(data, .(A,B), summarise, test = as.character(list(C)))
# A B test
# 1 111 1 c(5, 7)
# 2 111 2 6
# 3 222 1 9
# 4 222 2 c(8, 10)
如何保持character
并用逗号分隔它们?例如,第1行只能是"5,7"
,而不能是c(5,7)。
6条答案
按热度按时间rjjhvcjd1#
下面是一些使用
toString
的选项,这个函数可以连接一个字符串向量,使用逗号和空格分隔各个部分。如果不需要逗号,可以使用paste()
和collapse
参数。下面是使用SQL函数
group_concat
和sqldf package的替代方法:dplyr
替代品:rjzwgtxy2#
以下是
stringr
/tidyverse
解决方案:cwdobuhd3#
更改
as.character
的放置位置:注意,在这种情况下,每个项实际上仍然是一个单独的字符,而不是单个字符串。也就是说,这不是一个看起来像“5,7”的实际字符串,而是两个字符,“5”和“7”,R显示它们之间的逗号。
请与以下内容进行比较:
当然,以R为底的可比溶液为
aggregate
:2g32fytz4#
这里有一个小的改进,以避免重复
希望能有用。
nzk0hqpo5#
使用
collapse
中的collap
数据
mzmfm0qo6#
更新的
dplyr 1.1.0
解决方案,具有与.by
的内联分组:基准: