Получение строки с наименьшим значением для переменной в кадре данных триад - PullRequest
1 голос
/ 20 января 2020

Я хотел бы отфильтровать эту таблицу определенным образом c, чтобы для каждой триады значений для переменных A, B и C я получил значение с самым низким уровнем для фактор-переменной D. Я показываю пример:

sof7 <- structure(list(A = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L), .Label = "tomato", class = "factor"), B = structure(c(3L, 
3L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L), .Label = c("mozzarella", 
"salami", "zucchini"), class = "factor"), C = c(2L, 2L, 2L, 2L, 
1L, 1L, 1L, 5L, 5L, 5L), D = structure(c(1L, 2L, 3L, 4L, 2L, 
3L, 4L, 2L, 3L, 5L), .Label = c("A1", "A2", "A3", "A4", "A5"), class = "factor")), class = "data.frame", row.names = c(NA, 
-10L))

ожидается:

A   B   C   D
tomato  zucchini    2   A1
tomato  mozzarella  1   A2
tomato  salami  5   A2

1 Ответ

0 голосов
/ 20 января 2020

Мы можем использовать slice для числового индекса c после группировки по 'A', 'B'

library(dplyr)
sof7 %>% 
    group_by(A, B) %>%
    slice(which.min(C))
# A tibble: 3 x 4
# Groups:   A, B [3]
#  A      B              C D    
#  <fct>  <fct>      <int> <fct>
#1 tomato mozzarella     1 A2   
#2 tomato salami         5 A2   
#3 tomato zucchini       2 A1   

или используя filter

sof7 %>%
     group_by(A, B) %>%
     filter(C == min(C))

Или, если это нужно сделать группировкой по 'A', 'B', 'C' и получить строку с самым низким level для переменной factor 'D'

sof7 %>%
    group_by(A, B, C) %>% 
    slice(which.min(D))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...