У меня была следующая функция для расчета агрегированных ежемесячных изменений в некотором столбце.
monthly_summary <- setNames(
aggregate.data.frame(
t_merged[,c("amount_coerced")],
by = list(t_merged$year, t_merged$month),
FUN = sum,
drop = TRUE
), c("year", "month", "delta")
Затем я решил добавить еще несколько столбцов с результатами применения различных функций к одним и тем же данным (режим,медиана, наверное, что-то нестандартное и условное).Довольно простые вещи.
Я нашел этот ответ, и это именно то, что мне нужно.Тем не менее, когда я переписал функцию следующим образом:
monthly_summary <- setNames(
aggregate.data.frame(
t_merged[,c("amount_coerced")],
by = list(t_merged$year, t_merged$month),
FUN = function(x) c(sum(x), median(x)),
drop = TRUE
), c("year", "month", "delta", "daily_median")
я получаю
Error in names(object) <- nm :
'names' attribute [4] must be the same length as the vector [3]
Столбцы получают имя вместо [delta.1, delta.2], а nrow (month_summary) равнотеперь вдвое больше, чем ожидалось.Я закончил тем, что сделал это вместо:
monthly_summary <-
merge(
x = setNames(
aggregate.data.frame(
t_merged[,c("amount_coerced")],
by = list(t_merged$year, t_merged$month),
FUN = sum,
drop = TRUE
), c("year", "month", "delta")
),
y = setNames(
aggregate.data.frame(
t_merged[,c("amount_coerced")],
by = list(t_merged$year, t_merged$month),
FUN = median,
drop = TRUE
), c("year", "month", "daily_median")
),
by = c("year", "month"),
all.x = TRUE
)
И это работает точно так, как мне нужно, но это, очевидно, супер тупой способ сделать это.Может ли кто-нибудь указать мне на очевидную ошибку / неправильное мышление здесь, пожалуйста, я застрял.