我有一个像这样的数据框
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
排序,那么这个函数应该可以满足你的需求。 - MrFlickset.seed()
来复制你的样本数据。也许可以将其缩小,以便提供你所需的精确输出。我不确定 "flag" 与任何事情有关。你似乎知道如何处理一个值,所以我不确定为什么要包括你已经知道如何处理的部分。这只会使事情更难理解。 - MrFlick