【发布时间】:2020-12-21 02:05:23
【问题描述】:
如果x 的值低于y 的值,我正在尝试检查每个组week。每个组只需要检查该组中所有行的第一个值x,它在z 中为TRUE,过去几天除外。此外,一旦目标值 expected 为 TRUE,则无需进一步检查 week。 (如果此标准导致代码额外复杂,也可以继续检查该周)。
数据集:
date_daily <- seq(as.Date("2020-01-01"), as.Date("2020-01-14"), by="days")
x <- c(4, 5, 5, 7, 7, 8, 6, 3, 4, 4, 5, 5, 6, 3)
y <- c(3, 4, 6, 6, 5, 5, 5, 2, 3, 4, 5, 7, 5, 2)
z <- c( FALSE, TRUE , TRUE , FALSE , TRUE , FALSE , FALSE , FALSE , TRUE , TRUE , TRUE ,
FALSE , TRUE , FALSE )
df <- data.frame(date_daily, x, y, z)
df$week <- week(ymd(df$date_daily))
date_daily x y z week 1 2020-01-01 4 3 FALSE 1 2 2020-01-02 5 4 TRUE 1 3 2020-01-03 5 6 TRUE 1 4 2020-01-04 7 6 FALSE 1 5 2020-01-05 7 5 TRUE 1 6 2020-01-06 8 5 FALSE 1 7 2020-01-07 6 5 FALSE 1 8 2020-01-08 3 2 FALSE 2 9 2020-01-09 4 3 TRUE 2 10 2020-01-10 4 4 TRUE 2 11 2020-01-11 5 5 TRUE 2 12 2020-01-12 5 7 FALSE 2 13 2020-01-13 6 5 TRUE 2 14 2020-01-14 3 2 FALSE 2
我尝试将for loop 作为解决方案,但在星期组方面遇到了问题(将针对所有行运行)。预期结果:
df$expected <- c(NA, FALSE, TRUE, NA, NA, NA, NA, NA, FALSE, FALSE, TRUE, NA, NA, NA)
date_daily x y z week expected 1 2020-01-01 4 3 FALSE 1 NA 2 2020-01-02 5 4 TRUE 1 FALSE 3 2020-01-03 5 6 TRUE 1 TRUE 4 2020-01-04 7 6 FALSE 1 NA 5 2020-01-05 7 5 TRUE 1 NA 6 2020-01-06 8 5 FALSE 1 NA 7 2020-01-07 6 5 FALSE 1 NA 8 2020-01-08 3 2 FALSE 2 NA 9 2020-01-09 4 3 TRUE 2 FALSE 10 2020-01-10 4 4 TRUE 2 FALSE 11 2020-01-11 5 5 TRUE 2 TRUE 12 2020-01-12 5 7 FALSE 2 NA 13 2020-01-13 6 5 TRUE 2 NA 14 2020-01-14 3 2 FALSE 2 NA
【问题讨论】:
标签: r for-loop conditional-statements