Лучшие 3 значения на строку в R - PullRequest
1 голос
/ 01 мая 2020

Мой установленный фрейм данных:

ID Var1 Var2 Var3 ... Var50

Сумма переменных равна 1 для каждой строки. Я пытался получить верхние 3 переменные.

ID 1st 2nd 3rd

Будет ли работать группировка по ID и использование top_n ()?

Ответы [ 2 ]

3 голосов
/ 01 мая 2020

Если это строка, то мы можем использовать apply

t(apply(df1[-1], 1, function(x) head(sort(-x), 3)))

или с pmap, возвращая столбец list с 3 значениями в строке

library(purrr)
library(dplyr)
df1 %>%
    mutate(top3 = select(., -ID) %>% pmap(~ head(sort(-c(...)), 3)))

Если мы хотим использовать top_n, одним из вариантов является изменение в «длинный» формат

library(tidyr)
df1 %>% 
    pivot_longer(cols = -ID) %>%
    group_by(ID) %>%
    top_n(3, value)
1 голос
/ 01 мая 2020

С помощью data.table вы можете изменить свои данные в длинный формат и выбрать три максимальных значения по группе («ID»)

library(data.table)
df_long <- melt(df1, id.vars = "ID")[order(ID, desc(value))]
df_long[,.SD[1:3], by = "ID"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...