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