Суммировать несколько столбцов в R на основе 5 лучших значений - PullRequest
2 голосов
/ 22 апреля 2020

Я пытаюсь суммировать несколько столбцов на основе верхних 5 значений каждой переменной в R. Ниже приведен пример данных.

df

ID  A   B   C   D

A   325 68  8   8
B   308 85  2   7
B   342 99  6   2
A   439 83  9   6
A   278 60  10  2
A   367 78  14  4
C   136 59  12  5
C   259 73  11  4
B   338 79  5   6
B   461 99  3   7
D   364 73  14  4
D   238 80  3   8
A   266 54  10  10

Мой текущий код выглядит следующим образом:

    df2 <- df %>% group_by(ID) %>% top_n(5, A) %>% summarise(ATop5 = mean(A))

Вывод в df2 отображает информацию, которая мне нужна.

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

В настоящее время я создаю отдельный df для каждой переменной и затем объединение в один df через столбец ID.

Пропуск этого шага будет очень полезен.

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Опция с summarise_at

library(dplyr)
df %>%
   group_by(ID) %>%
   summarise_at(vars(A:D), ~ mean(tail(sort(.), 5)))
1 голос
/ 22 апреля 2020

В base вы можете использовать aggregate с . ~ ID, чтобы применить функцию ко всем оставшимся столбцам с группами.

aggregate(. ~ ID, df, function(x) mean(tail(sort(x),5)))
#  ID      A    B    C   D
#1  A 335.00 68.6 10.2 6.0
#2  B 362.25 90.5  4.0 5.5
#3  C 197.50 66.0 11.5 4.5
#4  D 301.00 76.5  8.5 6.0
...