如何根据分组数据框中另一个变量中的条件从变量返回值



我正在使用基本的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)) 

非常感谢。

group_by步骤之后,使用其中一个select_helpers指定要在summarise_at中选择的变量(这里starts_with工作正常(,并在list中,在每个列上应用不同的函数(~是匿名调用前缀的一种方式,而不是显式指定function(x)(, 对于第二个函数, "day"不是所选列的一部分,但可以使用不带引号的列名称进行选择

library(dplyr)
df %>%
  group_by(group) %>%
  summarise_at(vars(starts_with('var')),
         list(max = ~max(.), ini = ~ .[day == 1]))

最新更新