计算 R 中数据帧中行和列的中位数

Computing the median over both rows and columns in a dataframe in R

我的数据框如下所示:

Group1 | Group2 | Score1 | Score2 
-------|--------|--------|--------
   A   |    1   |   10   |   11   
   A   |    2   |   13   |   14  
   B   |    1   |    4   |    7   
   B   |    2   |    9   |   12  
   A   |    1   |    5   |   11   
   B   |    2   |    9   |   13  
   A   |    2   |    7   |    9  
   B   |    1   |    7   |   10  

我需要的是创建一个新变量,它为我提供每个子组组合的中值,例如

Group1 | Group2 | Score1 | Score2 | Median
-------|--------|--------|--------|-------
   A   |    1   |   10   |   11   |  10.5
   A   |    2   |   13   |   14   |  11.5
   B   |    1   |    4   |    7   |   7.0
   B   |    2   |    9   |   12   |  10.5
   A   |    1   |    5   |   11   |  10.5 
   B   |    2   |    9   |   13   |  10.5
   A   |    2   |    7   |    9   |  11.5
   B   |    1   |    7   |   10   |   7.0

(我手工计算的中位数可能是错误的,但我认为已经说明了这一点)。

我试过像这样使用聚合函数:

MedianAggregate <- aggregate(df[,45:47],
                             by = list(df$provider, df$field),
                             FUN = median) 

我得到的,而不是我想要的,是这样的:

Group1 | Group2 | Score1 | Score2 
-------|--------|--------|--------
   A   |    1   |   7.5  |   11  
   A   |    2   |   10   |   11.5   
   B   |    1   |   5.5  |   8.5  
   B   |    2   |    9   |   12.5   

基本上我需要的是获得相同的输出,如果我将中值函数应用于矩阵中的三行,而不是数据帧,对于子组的每个组合。

如有任何帮助,我们将不胜感激。

如果我理解正确的话,这是一个可能的解决方案:

library(reshape2)
library(dplyr)
df2 <- melt(df, id.vars = c("Group1","Group2"))
df2 %>% group_by(Group1, Group2) %>% summarise(median = median(value)) %>% merge(df, by = c("Group1","Group2"))