r - 在 dplyr 中使用 lag() 无法按预期工作

标签 r dplyr

我有以下数据框:

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/

相关文章:

regex - R中位置序列的长度(以字符串形式给出)

r - 如何以编程方式查找 R 包的数量?

r - 寻找组间新颖的类别

r - 如何将简单特征集合中的点转变为线

r - 如何根据值的实际顺序将数字转换为字母?

r - 定期为 R Shiny 输出捕获 cat 输出(renderPrint)

r - 双循环填充相关矩阵

r - dplyr 筛选具有大量匹配项的数据库表

r - 按行对选定列中的非 NA 观测值对进行计数

缓解 R for Windows 中的反斜杠刺激