我想根据两列中的值汇总一个数据框,除了每列实际上都有相同的变量,我不关心顺序是什么。这是一个示例数据框:
> df<-data.frame(val1=c(1,1,1,2,2), val2=c(1,2,2,1,1), val3=c(10, 20, 30, 40, 50))
> df
val1 val2 val3
1 1 1 10
2 1 2 20
3 1 2 30
4 2 1 40
5 2 1 50
我有兴趣对val3
进行总结,但我只关心val1
和val2
的无序组合。所以我想要处理
val1 val2 val3
1 1 2 20
与
相同 val1 val2 val3
1 2 1 40
我可以使用dplyr按列分组并总结如下:
> df %>% group_by(val1, val2) %>% summarize(mean=mean(val3))
Source: local data frame [3 x 3]
Groups: val1 [?]
val1 val2 mean
<dbl> <dbl> <dbl>
1 1 1 10
2 1 2 25
3 2 1 45
但我希望这个结果只包含两行!
我考虑创建一个反映val1
和val2
组合的新变量,然后将其分组,但无法找到一种简单的方法。 val1
和val2
不必是数字,可能不会总是连续的整数。
答案 0 :(得分:6)
我们可以使用pmin
和pmax
来创建分组变量
df %>%
group_by(val_1 = pmin(val1, val2), val_2 = pmax(val1, val2)) %>%
summarise(val3 = mean(val3))
# val_1 val_2 val3
# <dbl> <dbl> <dbl>
#1 1 1 10
#2 1 2 35
正如@Gregor在评论中提到的那样,更改名称的使用是故意的(val_1
与val1
或val_2
代替val2
)作为第二个陈述pmax
将评估&#39; val1&#39;列,如果我们有val1= pmin(val1, val2)