Функция R / Plyr для вывода значения столбца на основе максимального значения в другом столбце, по группам - PullRequest
0 голосов
/ 28 мая 2020

У меня есть фрейм данных с тремя столбцами (Mouse, Day, vol). Я пытаюсь использовать dplyr для создания нового фрейма данных для извлечения последнего значения «Day» для каждой мыши и соответствующего «vol» для этой мыши. Я могу использовать функцию max, чтобы получить правильный "День", но у меня проблемы с получением соответствующего "vol". Любая помощь приветствуется. Ниже приведен мой dput фрейма данных и код, который я пытаюсь собрать.

final_meas <- ddply(df, "Mouse", summarise,
               final_day = max(Day),
               final_vol = 
)

Если есть лучший способ сделать это, дайте мне знать.

Data frame dput ()

structure(list(Mouse = c("CF1", "CF2", "CG1", "CG2", "CG3", "CO1", 
"CO2", "CU1", "CY1", "CF1", "CF2", "CG1", "CG2", "CG3", "CO1", 
"CO2", "CU1", "CY1", "CF1", "CF2", "CG1", "CG2", "CG3", "CO1", 
"CO2", "CU1", "CY1", "CF1", "CF2", "CG1", "CG2", "CG3", "CO1", 
"CO2", "CF2", "CG1", "CG2", "CG3", "CO1", "CF2", "CG1", "CG2", 
"CG3", "CO1", "CF2", "CG1", "CG2", "CG3", "CO1", "CF2", "CG1", 
"CG2", "CG3", "CO1", "CF2", "CG1", "CG2", "CG3", "CO1", "CF2", 
"CG1", "CG2", "CG3", "CO1"), Day = c(11, 11, 11, 11, 11, 11, 
11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 16, 16, 16, 16, 
16, 16, 16, 16, 16, 21, 21, 21, 21, 21, 21, 21, 26, 26, 26, 26, 
26, 28, 28, 28, 28, 28, 30, 30, 30, 30, 30, 32, 32, 32, 32, 32, 
35, 35, 35, 35, 35, 38, 38, 38, 38, 38), vol = c(45.9675, 36.1712655, 
87.777976, 14.29754, 14.2842745, 22.989735, 19.3821875, 56.216752, 
71.251488, 0.5, 44.6299425, 119.070536, 26.82875, 21.999132, 
71.801216, 0.5, 255.874619, 137.720968, 0.5, 21.5552, 115.16616, 
33.132848, 17.619264, 51.185368, 0.5, 212.1728, 340.5686, 0, 
0.5, 75.154122, 76.0952875, 0.5, 107.208528, 0, 0.5, 63.5839875, 
233.4784, 0.5, 74.6727445, 0.5, 55.7932375, 361.3029455, 0, 88.297668, 
0.5, 38.0849105, 228.4934, 0.5, 136.778328, 0.5, 0.5, 186.7279545, 
0.5, 178.4032435, 0.5, 0, 186.7279545, 0.5, 89.4645, 0.5, 0, 
186.7279545, 0.5, 169.296399)), row.names = c(NA, -64L), class = c("tbl_df", 
"tbl", "data.frame"))

1 Ответ

1 голос
/ 28 мая 2020

Вот один из подходов с использованием тидиверса

library(tidyverse)

df_example %>% 
  group_by(Mouse) %>% 
  mutate(max_day = max(Day),
         max_vol = if_else(Day == max(Day),vol,NA_real_)) %>% 
  fill(max_vol,.direction = "downup")
...