r - 如何根据前一行过滤行并使用 dplyr 保留前一行?
问题描述
我正在尝试使用基于前一行的条件对数据集的行进行子集化,同时将前一行保留在子集化数据中。这与这里的问题基本相同,但我正在寻找一种 dplyr 方法:
我已经在该答案的评论中采用了 dplyr 方法,但我无法弄清楚保留前一行的最后一步。
我可以获得支持我感兴趣的条件的行(incorrect
当前一行不是时enter
)。
set.seed(123)
x=c("enter","incorrect","enter","correct","incorrect",
"enter","correct","enter","incorrect")
y=c(runif(9, 5.0, 7.5))
z=data.frame(x,y)
filter(z, x=="incorrect" & lag(x)!="enter")
正如预期的那样,这给出了:
x y
1 incorrect 7.351168
我想要生成的是这样的,以便我根据条件过滤的所有行都与原始数据集中它们之前的行一起存储:
x y
1 correct 7.207544
2 incorrect 7.351168
任何帮助将不胜感激!
解决方案
通过过滤,您可以:
z %>%
filter( (x == "incorrect" & lag(x) != "enter") | lead(x == "incorrect" & lag(x) != "enter") )
给予:
x y
1 correct 7.207544
2 incorrect 7.351168
推荐阅读
- php - PHP - 数组中的未设置值不包含前缀
- r - 映射函数以迭代 t.test
- reactjs - 特殊属性更改时仅运行一次 useEffect
- php - 具有多个值列的 3 个表的 sql 查询
- javascript - 如何将 Google Analytics 集成到您的 Nuxt.js 应用程序中
- sql - 查找最新记录
- c# - 清除 Console.ReadLine 和 Console.Read 之间的控制台缓冲区
- c - 用于判断数字是否为“完美数字”的代码
- kotlin - Jetpack Compose Row 水平排列约束
- bash - 如何使用 bash 脚本/CMakeLists.txt 运行 cmake