【发布时间】:2019-04-12 10:52:09
【问题描述】:
A 组和 B 组共有 10 个项目,每个项目的开始和结束日期都不同。对于给定时间段内的每一天,需要计算 outputX 和 outputY 的总和。我设法为所有项目一起执行此操作,但是如何按组划分结果?
我已经多次尝试使用 lapply() 和 purrr:map(),还查看了过滤器和拆分,但无济于事。下面是一个不区分组的示例。
library(tidyverse)
library(lubridate)
df <- data.frame(
project = 1:10,
group = c("A","B"),
outputX = rnorm(2),
outputY = rnorm(5),
start_date = sample(seq(as.Date('2018-01-3'), as.Date('2018-1-13'), by="day"), 10),
end_date = sample(seq(as.Date('2018-01-13'), as.Date('2018-01-31'), by="day"), 10))
df$interval <- interval(df$start_date, df$end_date)
period <- data.frame(date = seq(as.Date("2018-01-08"), as.Date("2018-01-17"), by = 1))
df_sum <- do.call(rbind, lapply(period$date, function(x){
index <- x %within% df$interval;
list("X" = sum(df$outputX[index]),
"Y" = sum(df$outputY[index]))}))
outcome <- cbind(period, df_sum) %>% gather("id", "value", 2:3)
outcome
最终,它应该是一个 40x4 的表格。非常感谢一些建议!
【问题讨论】:
-
预期输出是什么?
-
包含“日期”、“组”、“输出 ID”和“值”列的表。 “组”现在不见了。