【发布时间】:2021-09-07 08:04:57
【问题描述】:
让我分享一个我正在尝试做的例子,因为标题可能不像我希望的那样清晰。
data <- tibble(week=1:10,name=c(rep("Joe",10)),value=c(.9,.89,.99,.98,.87,.89,.93,.92,.98,.9),
wanted = c("Yes","Skip","No","No","Yes","Skip","Yes","Skip","No","Yes"))
data <- data %>% mutate(my_attempt = case_when( week-lag(week)==1 &
value < .95 &
lag(value) < .95 &
lag(value,2) >= .95 &
!is.na(lag(value,2))~ "Skip",
week-lag(week)==1 &
value < .95 &
lag(value) < .95 &
is.na(lag(value,2))~ "Skip",
value < .95 ~"Yes",
TRUE ~ "No"))
# week name value wanted my_attempt
# <int> <chr> <dbl> <chr> <chr>
# 1 Joe 0.9 Yes Yes
# 2 Joe 0.89 Skip Skip
# 3 Joe 0.99 No No
# 4 Joe 0.98 No No
# 5 Joe 0.87 Yes Yes
# 6 Joe 0.89 Skip Skip
# 7 Joe 0.93 Yes Yes
# 8 Joe 0.92 Skip Yes
# 9 Joe 0.98 No No
# 10 Joe 0.9 Yes Yes
我正在尝试让 my_attempt 列生成所需列的结果。我想在值小于某个阈值时识别行,但不能有两个连续的“是”值。我的尝试一直有效,直到它连续看到 4 个或更多低值。在我的真实数据中,可能会缺少几周,但这可以被视为“否”。例如,如果缺少第 6 周,则第 7 周仍然可以选择“是”(我认为在我的情况下第一行会处理这个问题)。有没有办法在 R 中做到这一点?它不必与 dplyr 保持一致,但如果在 tidyverse 中可行,那就太好了。
【问题讨论】:
标签: r dplyr duplicates rolling-computation accumulate