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年轻的戴安娜,汉娜
我是约翰,罗恩
您可以在baseR
中使用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
完美的谢谢你,太好了!非常感谢。