Как добавить новый столбец для извлечения числа / символа из столбца 1, когда столбец 2 достигает максимума в каждой группе? - PullRequest
1 голос
/ 27 апреля 2020

у меня 3 столбца. C1 и C2 сгруппированы по C0. Теперь я хочу извлечь значение C3 там, где оно удовлетворяет, когда C1 максимально в каждой группе C0.

df = data.frame(C0 = c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3),
            C1 = c(0,2,3,6,2,0,0,4,9,7,1,2,7,4,2),
            C2 = c("A","B", "C", "D", "E","A","B", "C", "D", "E","A","B", "C", "D", "E"))

Теперь я хочу добавить новый столбец C4, который является значением C2, где соответствующий C1 достигает максимум в каждой группе C0. Теперь я могу только извлечь значение максимального C1, что-то вроде этого

df %>% group_by(C0) %>% mutate (C4 = max(C1))

Но этот код возвращается, поскольку C4 - это значение максимального значения C1 в каждой группе C0. Я не знаю, как извлечь соответствующее значение C2. Кроме того, я не хочу просто извлечь строку максимального значения, но добавить новый столбец. Вот так (поскольку мне не разрешено прикреплять фигуру, я использую код для объяснения идеи:

df = data.frame(C0 = c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3),
            C1 = c(0,2,3,6,2,0,0,4,9,7,1,2,7,4,2),
            C2 = c("A","B", "C", "D", "E","A","B", "C", "D", "E","A","B", "C", "D", "E"),
            C4 = c("D","D","D","D","D","D","D","D","D","D","C","C","C","C","C"))

Большое спасибо за помощь!

1 Ответ

0 голосов
/ 27 апреля 2020

Мы можем использовать which.max после группировки по 'C0', чтобы получить индекс строки, и использовать его для подстановки значения 'C2'

library(dplyr)
df %>%
    group_by(C0) %>%
    mutate(C4 = C2[which.max(C1)])
# A tibble: 15 x 4
# Groups:   C0 [3]
#      C0    C1 C2    C4   
#   <dbl> <dbl> <fct> <fct>
# 1     1     0 A     D    
# 2     1     2 B     D    
# 3     1     3 C     D    
# 4     1     6 D     D    
# 5     1     2 E     D    
# 6     2     0 A     D    
# 7     2     0 B     D    
# 8     2     4 C     D    
# 9     2     9 D     D    
#10     2     7 E     D    
#11     3     1 A     C    
#12     3     2 B     C    
#13     3     7 C     C    
#14     3     4 D     C    
#15     3     2 E     C    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...