考虑以下数据:
df <- data.frame(names = sample(letters[1:5], 20, replace = T), numbers = 1:20)
我们有函数cumsum
,这样对于组中的每一行,它计算直到该行的所有数字的累积和
library(dplyr)
df %>%
group_by(names) %>%
mutate(cumsum_numbers = cumsum(numbers))
我希望以与my_fn
相同的方式累积应用通用函数cumsum
。 my_fn
具有一般形式:
my_fn <- function(vector){
# do stuff to vector
return(x) # x is a numeric scalar
}
也就是说,它采用行的先前值向量,并返回标量。
以下代码不起作用:
df %>%
group_by(names) %>%
mutate(cumsum_numbers = my_fn(numbers)) # will apply my_fn
# to each group in numbers, returning the
# same value for each grouping level
所以我想我想要这样的东西:
df %>%
group_by(names) %>%
mutate(cumsum_numbers = cum_my_fn(numbers))
请注意,用于计算累积平均值的示例函数为mean
。有趣的是dplyr
已经实现了cummean
,但我不知道其内部工作方式,所以我无法弄清楚如何为一般函数实现这种行为。