按组累积方式使用dplyr对数据进行总结

3

我有一个像这样的数据框

dat <- data.frame(id = rep(1:4, each = 4),
                  x = 1:16,
                  y = 16:1)

library(dplyr)

我希望对每个id执行以下操作

for id 1, do mean(x)/mean(y), 
for id 2, do mean(x)/mean(y) where x and y includes values from id 1 and 2 
for id 3, do mean(x)/mean(y) where x and y includes values from id 1, 2 and 3 
for id 4, do mean(x)/mean(y) where x and y includes values from id 1, 2, 3 and 4 

我用传统的 for 循环来完成这个任务。
temp.vec <- list()
for(l in sort(unique(dat$id))){
  
  temp.vec[[l]] <- dat %>% 
                   dplyr::filter(id <= l) %>%
                   dplyr::summarise(value = mean(x)/mean(y)) 
  print(l)
}

result <- rbindlist(temp.vec)
result 
value
1: 0.1724138
2: 0.3600000
3: 0.6190476
4: 1.0000000

我能使用dplyr来做这件事吗?


有一个 dplyr::cummean 函数用于计算累积平均值。如果你的数据按 id 排序,那么这个函数应该可以满足你的需求。 - MrFlick
谢谢。我尝试了你的建议。这个函数并没有给我我想要的东西,我需要一个汇总而不是一个运行平均值。 - 89_Simple
1
你想要什么结果?使用 set.seed() 来复制你的样本数据。也许可以将其缩小,以便提供你所需的精确输出。我不确定 "flag" 与任何事情有关。你似乎知道如何处理一个值,所以我不确定为什么要包括你已经知道如何处理的部分。这只会使事情更难理解。 - MrFlick
好的,请让我编辑一下问题。 - 89_Simple
1个回答

3
dat %>%
  group_by(id) %>%
  summarise(mean_x = mean(x), mean_y = mean(y)) %>%
  mutate(result = cumsum(mean_x) / cumsum(mean_y)) %>%
  pluck("result")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接