gpt4 book ai didi

r - 使用累加识别 R 中的连续重复项

转载 作者:行者123 更新时间:2023-12-04 12:22:08 24 4
gpt4 key购买 nike

让我分享一个我正在尝试做的事情的例子,因为标题可能没有我想要的那么清楚。

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 列产生想要的列的结果。我想在值小于某个阈值时识别行,但不能有两个连续的"is"值。我对它的尝试一直有效,直到它连续看到 4 个或更多的低值。在我的真实数据中,可能会丢失一些星期,但这可以被视为“否”。例如,如果缺少第 6 周,则第 7 周仍然可以"is"(我认为在我的情况下是第一行)。有没有办法在R中做到这一点?它不必与 dplyr 保持一致,但如果可以在 tidyverse 中使用,那就太好了。

最佳答案

我想你可以用 purrr:accumulate()这里

library(purrr)
library(dplyr)

data%>%mutate(my_attempt = ifelse(week-lag(week, default = 0)==1 &
value < .95,
'Yes', 'No')%>%
accumulate(~ifelse(.x==.y & .y=='Yes', 'Skip', .y)))

# A tibble: 10 x 5
week name value wanted my_attempt
<int> <chr> <dbl> <chr> <chr>
1 1 Joe 0.9 Yes Yes
2 2 Joe 0.89 Skip Skip
3 3 Joe 0.99 No No
4 4 Joe 0.98 No No
5 5 Joe 0.87 Yes Yes
6 6 Joe 0.89 Skip Skip
7 7 Joe 0.93 Yes Yes
8 8 Joe 0.92 Skip Skip
9 9 Joe 0.98 No No
10 10 Joe 0.9 Yes Yes

关于r - 使用累加识别 R 中的连续重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68105390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com