Вычисление медианы по строкам и столбцам в фрейме данных в R - PullRequest
1 голос
/ 04 марта 2020

У меня есть кадр данных, который выглядит следующим образом:

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   

в основном мне нужно получить тот же результат, который я получил бы, если бы я применил медианную функцию к трем строкам матрицы, а не к фрейм данных, для каждой комбинации подгруппы.

Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 04 марта 2020

Вот возможное решение, если я правильно понял:

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"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...