如何汇总重复行的数据

时间:2019-01-30 13:00:54

标签: r

我有这个data.frame

> head(people)
    role name           n
1   A    Chet Baker     1
2   A    Chet Baker     2
3   A    Miles Davis    2
4   B    Miles Davis    5
5   A    Miles Davis    1
6   A    Bill Evans     1

数据混乱,因为它无法正确汇总值,从而为相同信息生成重复项。

我需要两个data.frame

这样的人:

> head(sum_people)
    name           n
1   Chet Baker     3
2   Miles Davis    8
3   Bill Evans     1 

包含一个人在其df中以其n出现的总次数

和另一个这样的人:

> head(sum_people_role)
    role name           n
1   A    Chet Baker     3
2   A    Miles Davis    3
3   B    Miles Davis    
4   A    Bill Evans     1 

包含指定角色的总数。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

使用dplyr-软件包,这些操作很简单。

library(dplyr)

sum_people <- people %>% 
  group_by(name) %>% summarise(n=sum(n))
sum_people_role <- people %>% 
  group_by(name, role) %>% summarise(n=sum(n))

%>%运算符是菊花链运算符。没有它,上面的代码可以写成:

sum_people <- summarise(group_by(.data=people, name), n=sum(n))

,对于使用虚构函数fgh的较长操作,我们可以将其写成老式的:

step1 <- f(data, arg1=5)
step2 <- g(step1, arg2=0, na.rm=TRUE)
result <- h(step2)

或更简单

result <- h(g(f(data, arg1=5), arg2=0, na.rm=TRUE))

或菊花链式填充:

result <- data %>% f(arg1=5) %>% g(arg2=0, na.rm=TRUE) %>% h()

第一个论点去了哪里? %>%隐式将其插入第一个参数。 (您可以通过将前面的结果称为.插入到另一个参数中。