让我分享一个例子,来说明我想做的事情。因为标题可能不太清晰。
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列输出wanted列的结果。我想要识别值小于某个阈值时的行,但不能有两个连续的“yes”值。我尝试过,但是当出现4个或更多连续的低值时就失效了。在我的实际数据中,一些周可能会缺失,但可以视为“否”。例如,如果第6周缺失,则第7周仍然可以是“Yes”(我认为这种情况下的第一行已经解决了这个问题)。是否有一种方法可以在R中实现这一点?它不必与dplyr一致,但如果能够在tidyverse中实现的话就更好了。
accumulate
。 - Anoushiravan Rvalue
小于0.95,则我希望my_attempt
返回“Yes”。但是,如果上一周已经有了“Yes”,则我希望它返回“Skip”。 - syntax_errortidyverse
解决方案。 - Anoushiravan R