如何使用 rollapply 根据 R 中另一列的值标记一列的值?

How to flag the values of a column based on values of another column in R by using rollapply?

我有一个数据框,像这样:

df <- data.frame (T  = c(1:20), L = c(1,2,9,4,6,8,3,4,2,5,2,5,9,10,3,5,1,1,2,2))

我想标记一个T值Ti(还有Ti−1和 Ti+1) 如果 Li 大于 6(即总共标记 3 个值)。

Rollapply 怎么办?

我想我们可以不用 rollapply。也许我们可以试试下面的代码

transform(
  df,
  Flag = seq_along(L) %in% pmax(pmin(sort(unique(outer(-1:1, which(L > 6), `+`))), length(L)), 1)
)

这给出了

    T  L  Flag
1   1  1 FALSE
2   2  2  TRUE
3   3  9  TRUE
4   4  4  TRUE
5   5  6  TRUE
6   6  8  TRUE
7   7  3  TRUE
8   8  4 FALSE
9   9  2 FALSE
10 10  5 FALSE
11 11  2 FALSE
12 12  5  TRUE
13 13  9  TRUE
14 14 10  TRUE
15 15  3  TRUE
16 16  5 FALSE
17 17  1 FALSE
18 18  1 FALSE
19 19  2 FALSE
20 20  2 FALSE

使用rollapply-

library(dplyr)
library(zoo)

df %>%
  mutate(flag = rollapply(L > 6, 3, any, fill = FALSE))

#    T  L  flag
#1   1  1 FALSE
#2   2  2  TRUE
#3   3  9  TRUE
#4   4  4  TRUE
#5   5  6  TRUE
#6   6  8  TRUE
#7   7  3  TRUE
#8   8  4 FALSE
#9   9  2 FALSE
#10 10  5 FALSE
#11 11  2 FALSE
#12 12  5  TRUE
#13 13  9  TRUE
#14 14 10  TRUE
#15 15  3  TRUE
#16 16  5 FALSE
#17 17  1 FALSE
#18 18  1 FALSE
#19 19  2 FALSE
#20 20  2 FALSE