在dplyr中累积应用函数

时间:2016-07-06 11:44:23

标签: r dplyr

考虑以下数据:

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相同的方式累积应用通用函数cumsummy_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,但我不知道其内部工作方式,所以我无法弄清楚如何为一般函数实现这种行为。

0 个答案:

没有答案