我想根据两列中的值汇总一个数据框,除了每列实际上都有相同的变量,我不关心顺序是什么.这是一个示例数据框:
> 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
Run Code Online (Sandbox Code Playgroud)
我感兴趣的总结了val3,除了我只关心无序的组合val1和val2.所以我想要对待
val1 val2 val3
1 1 2 20
Run Code Online (Sandbox Code Playgroud)
同样的
val1 val2 val3
1 2 1 40
Run Code Online (Sandbox Code Playgroud)
我可以使用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
Run Code Online (Sandbox Code Playgroud)
但我希望这个结果只包含两行!
我想过创建一个反映组合的新变量val1,并val2通过再组,但不能找出一个简单的方法来此.val1并且val2不必是数字,并且可能不会总是连续的整数.
我们可以使用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
Run Code Online (Sandbox Code Playgroud)
正如@Gregor在评论中提到的,更改名称的使用是有意的(val_1相对于val1或val_2代替val2),因为pmax如果我们有第二个语句将评估'val1'列的输出val1= pmin(val1, val2)