折叠/连接/聚合列到每个组中的单个逗号分隔的字符串

前端之家收集整理的这篇文章主要介绍了折叠/连接/聚合列到每个组中的单个逗号分隔的字符串前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想根据两个分组变量在数据框中聚合一列,并用逗号分隔各个值。

这里有一些数据:

data <- data.frame(A = c(rep(111,3),rep(222,3)),B = rep(1:2,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”是我要折叠成逗号分隔的字符串的变量。我努力了:

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

但是当我尝试将测试列转换为字符时,它变成如下:

ddply(data,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)

如何保留字符格式并用逗号分隔?例如,第1行应该只有“5,7”,而不是c(5,7)。

plyr尝试使用toString:
# plyr
library(plyr)
ddply(data,summarize,C = toString(C))

这里还有一些额外的替代方法也使用toString:

data.table

# alternative using data.table
library(data.table)
as.data.table(data)[,toString(C),by = list(A,B)]

聚合这不使用包:

# alternative using aggregate from the stats package in the core of R
aggregate(C ~.,data,toString)

sqldf

这里是使用sql功能group_concat使用sqldf package的另一种方法

library(sqldf)
sqldf("select A,B,group_concat(C) C from data group by A,B",method = "raw")

dplyr替代品:

library(dplyr)
data %>%
  group_by(A,B) %>%
  summarise(test = toString(C)) %>%
  ungroup()
原文链接:https://www.f2er.com/javaschema/282142.html

猜你在找的设计模式相关文章