我有以下数据框:
col1<-c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3)
col2<-c(1,2,3,44,1,1,2,3,44,44,1,2,44,1,44)
df<-data.frame(col1,col2)
我正在尝试按 col1 条目进行分组,并为 col1 的每个分组找到 col2 的值等于 44,紧接着是一个较小的条目 (<44),并在新列中标记这些条目。
但是,这段代码似乎不起作用:
df %>% group_by(col1) %>% mutate(FLAG=(col2==44 & lead(col2,1)<44))
col1 col2 FLAG
<dbl> <dbl> <lgl>
1 1 1 FALSE
2 1 2 FALSE
3 1 3 FALSE
4 1 44 TRUE
5 1 1 FALSE
6 2 1 FALSE
7 2 2 FALSE
8 2 3 FALSE
9 2 44 FALSE
10 2 44 TRUE
11 3 1 FALSE
12 3 2 FALSE
13 3 44 TRUE
14 3 1 FALSE
15 3 44 NA
具体来说,条目 10 应该为 FALSE,因为在紧跟其后的同一组中没有条目 <44。关于如何编写更通用的代码来完成我想做的事情,有什么建议吗?
最佳答案
另一种方法是使用dplyr
包的if_else
函数
df %>% group_by(col1) %>% mutate(FLAG=if_else(col2==44 & lead(col2,1)<44,TRUE,FALSE,missing = FALSE))
# Source: local data frame [15 x 3]
# Groups: col1 [3]
#
# col1 col2 FLAG
# <dbl> <dbl> <lgl>
# 1 1 1 FALSE
# 2 1 2 FALSE
# 3 1 3 FALSE
# 4 1 44 TRUE
# 5 1 1 FALSE
# 6 2 1 FALSE
# 7 2 2 FALSE
# 8 2 3 FALSE
# 9 2 44 FALSE
# 10 2 44 FALSE
# 11 3 1 FALSE
# 12 3 2 FALSE
# 13 3 44 TRUE
# 14 3 1 FALSE
# 15 3 44 FALSE
关于r - 在 dplyr 中使用 lag() 无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42120794/