Вместо суммирования с aggregate
и затем merge
, непосредственно используйте ave
из base R
, чтобы создать столбец
my_df$MONTHLY_LENGHT_MEDIAN <- with(my_df, ave(LENGHT, YEAR,
MONTH, ID, FUN = median))
mydf$MONTHLY_LENGHT_MEDIAN
#[1] 0.20 0.20 0.20 0.40 0.40 0.60 0.60 0.60 0.35 0.35
или с tidyverse
library(tidyverse)
my_df %>%
group_by(LENGHT, YEAR, MONTH) %>%
mutate(MONTHLY_LENGHT_MEDIAN = median(LENGHT))
данные
my_df <- structure(list(YEAR = c(2000L, 2000L, 2000L, 2000L, 2000L, 2000L,
2000L, 2000L, 2000L, 2000L), MONTH = c("january", "january",
"january", "january", "january", "february", "february", "february",
"february", "february"), ID = c("S1", "S1", "S1", "S2", "S2",
"S1", "S1", "S1", "S3", "S3"), LENGHT = c(0.2, 0.3, 0.1, 0.5,
0.3, 0.9, 0.4, 0.6, 0.4, 0.3)), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10"))