R 通过匹配元素收缩数据帧行

R 通过匹配元素收缩数据帧行,r,R,我有一个看起来像这样的数据框: Name Desc Sex 1 John young M 2 Diana young F 3 Bob old M 4 Hanna young F 5 Ben old M 6 Liza old F 7 Ron young M 有没有一种方法可以将行分组,从而得到以下数据帧 Name Desc Sex 1 John, Ron young M 2 D

我有一个看起来像这样的数据框:

  Name   Desc    Sex
1 John   young   M
2 Diana  young   F
3 Bob    old     M
4 Hanna  young   F
5 Ben    old     M
6 Liza   old     F
7 Ron    young   M
有没有一种方法可以将行分组,从而得到以下数据帧

  Name          Desc   Sex
1 John, Ron     young  M
2 Diana, Hanna  young  F
3 Bob, Ben      old    M
4 Liza          old    F
数据

df <- read.table(text="Name   Desc    Sex
1 John   young   M
2 Diana  young   F
3 Bob    old     M
4 Hanna  young   F
5 Ben    old     M
6 Liza   old     F
7 Ron    young   M",h=T,strin=F)

df使用
dplyr
我们可以

library(dplyr)
df %>% group_by(Desc,Sex) %>% summarise(Name=paste(Name,collapse = ','))

# A tibble: 4 x 3
# Groups:   Desc [2]
  Desc  Sex   Name       
 <fct> <fct> <chr>      
1 old   F     Liza       
2 old   M     Bob,Ben    
3 young F     Diana,Hanna
4 young M     John,Ron   
库(dplyr)
df%>%分组依据(描述,性别)%>%摘要(名称=粘贴(名称,折叠=','))
#一个tibble:4x3
#组别:Desc[2]
描述性别名称
1老F莉莎
我是鲍勃,本
3年轻的戴安娜,汉娜
我是约翰,罗恩

使用
dplyr
我们可以

library(dplyr)
df %>% group_by(Desc,Sex) %>% summarise(Name=paste(Name,collapse = ','))

# A tibble: 4 x 3
# Groups:   Desc [2]
  Desc  Sex   Name       
 <fct> <fct> <chr>      
1 old   F     Liza       
2 old   M     Bob,Ben    
3 young F     Diana,Hanna
4 young M     John,Ron   
库(dplyr)
df%>%分组依据(描述,性别)%>%摘要(名称=粘贴(名称,折叠=','))
#一个tibble:4x3
#组别:Desc[2]
描述性别名称
1老F莉莎
我是鲍勃,本
3年轻的戴安娜,汉娜
我是约翰,罗恩

您可以在base
R
中使用
aggregate

aggregate(Name ~ ., df, paste, collapse= ", ")
#    Desc Sex         Name
# 1   old   F         Liza
# 2 young   F Diana, Hanna
# 3   old   M     Bob, Ben
# 4 young   M    John, Ron

您可以在基本
R
中使用
aggregate

aggregate(Name ~ ., df, paste, collapse= ", ")
#    Desc Sex         Name
# 1   old   F         Liza
# 2 young   F Diana, Hanna
# 3   old   M     Bob, Ben
# 4 young   M    John, Ron

我们可以使用
data.table
。将'data.frame'转换为'data.table'(
setDT(df)
),按'Desc'、'Sex'
将'Name'粘贴在一起,用
分隔,

library(data.table)
setDT(df)[, .(Name = toString(Name)), by = .(Desc, Sex)]
#    Desc Sex         Name
#1: young   M    John, Ron
#2: young   F Diana, Hanna
#3:   old   M     Bob, Ben
#4:   old   F         Liza

我们可以使用
data.table
。将'data.frame'转换为'data.table'(
setDT(df)
),按'Desc'、'Sex'
将'Name'粘贴在一起,用
分隔,

library(data.table)
setDT(df)[, .(Name = toString(Name)), by = .(Desc, Sex)]
#    Desc Sex         Name
#1: young   M    John, Ron
#2: young   F Diana, Hanna
#3:   old   M     Bob, Ben
#4:   old   F         Liza

完美的谢谢你,太好了!非常感谢。