我有这个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
包含指定角色的总数。
有什么想法吗?
答案 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))
,对于使用虚构函数f
,g
和h
的较长操作,我们可以将其写成老式的:
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()
第一个论点去了哪里? %>%
隐式将其插入第一个参数。 (您可以通过将前面的结果称为.
插入到另一个参数中。