Я вычисляю некоторые метрики для каждого набора переменных в сгруппированном кадре данных, используя базовый подход group_by()
+ summarize_at
. Каждая группа представляет небольшую серию времени. Одна метрика, которую я хотел бы рассчитать, - это начальное значение (в данном случае day == 1
) каждой переменной в каждой группе. Таким образом, обобщенная проблема состоит в том, чтобы возвращать значение переменной на основе критерия в другой переменной внутри групп сгруппированного кадра данных. В рамках подхода group_by()
+ summarize_at
я считаю, что мне нужна пользовательская функция, которую summarize_at
затем можно применить к каждой переменной. Я могу успешно развернуть другие пользовательские функции, которые зависят только от имеющейся переменной данных. Я, кажется, завис на том, чтобы заставить функцию посмотреть другие столбцы информационного кадра.
Я не женат на таком подходе, и приветствую альтернативные рекомендации. Тем не менее, я чувствую себя наиболее комфортно с dplyr.
# a dataset
df <- data.frame(day = rep(c(1:5),3),
group = c(rep(1,5),rep(2,5),rep(3,5)),
var_a = seq(1:15),
var_b = seq(2,30, length.out = 15),
var_c = seq(3,45, length.out = 15))
# the logic of what I am going for, on a manually extracted example group:
# initial value (day == 1) of var_a for group 2
df_subset <- df %>%
filter(group == 2)
df_subset$var_a[which(df_subset$day == 1)]
# [1] 6
# my laughable attempt at a function
initial <- function(x){
ini <- which(.$day == 1)
x[ini]
}
# custom function deployed in dplyr pipe (which of course doesn't work)
df %>%
group_by(group) %>%
summarize_at(c("var_a","var_b","var_c"),
list(max = max, ini = initial))
Большое спасибо.