R изменяет фрейм данных на основе max в столбце с помощью dplyr - PullRequest
1 голос
/ 17 июня 2020

Я хочу использовать ddply или group_by для изменения существующего фрейма данных на основе значений в одном из столбцов фрейма данных.

У меня есть фрейм данных с 3 столбцами. Я хочу определить ROI в пределах каждого идентификатора и условия, которые имеют максимальное значение в df $ Value. Итак, для следующего df ROI 3 будет называться Max для ID 1 + условие соответствия, ROI 4 будет Max для ID 1 + NoMatch Condition и т. Д.

set.seed(1)
df <- data.frame("ID"=sort(rep_len(1:2, 12)), "ROI"=rep_len(1:6, 12), "Condition"=rep_len(c(rep_len("Match", 3), rep_len("NoMatch", 3)), 12), "Value"=runif(12), MaxROI="None")

Я пробовал использовать некоторые комбинации ddply и group_by. Например:

ddply(df, c("ID", "Condition"), mutate, MaxROI[which.max(Value)]="Max")

#generates an error
#Error: unexpected '=' in "ddply(df, c("ID", "Condition"), mutate, MaxROI[which.max(Value)]="

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

Спасибо,

Мринмайи

1 Ответ

1 голос
/ 17 июня 2020

Мы можем использовать dplyr. После группировки по «ID», «Condition» создайте столбец «Max», сравнив «Value» с max из «Value» в case_when, чтобы создать строку «Max», в которой есть максимальное «Value». иначе по умолчанию это NA

library(dplyr)
df %>% 
   group_by(ID, Condition) %>% 
   dplyr::mutate(Max =case_when(Value == max(Value) ~ "Max"))
...