如何使用 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
我有一个数据框,像这样:
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