如何在R语言中基于上一行值筛选并删除指定条件的行?
按条件筛选并删除数据行的R语言实现
删除条件
需同时满足以下所有条件时,才删除对应行:
- 当前行的
travel字段值>100 - 上一行的
travel字段值>100 - 当前行的
angle字段值绝对值>150
示例数据集
points <- c(1:18) travel <- c(1, 5, 200, 400, 15, 30, 400, 402, 8, 17, 52, 41, 600, 580, 5, 12, 180, 0) angle <- c(0, -30, 55, 3, -160, 108, -172, -180, -5, 42, -86, 160, -3, 164, 16, -30, 84, 0) path <- data.frame(points, travel, angle)
解决方案1:使用dplyr包
library(dplyr) # 筛选保留不满足删除条件的行 path_filtered <- path %>% filter(!(travel > 100 & lag(travel) > 100 & abs(angle) > 150)) # 查看筛选后的数据 print(path_filtered)
逻辑说明:lag(travel)用于获取当前行的上一行travel值,通过!取反删除条件,保留符合要求的行。运行后会自动删除示例中的第8行和第14行。
解决方案2:基础R实现
# 生成删除条件的逻辑向量 delete_flag <- with(path, travel > 100 & c(FALSE, travel[-length(travel)] > 100) & abs(angle) > 150) # 筛选数据 path_filtered <- path[!delete_flag, ] # 查看筛选后的数据 print(path_filtered)
逻辑说明:用c(FALSE, travel[-length(travel)])构造上一行的travel值序列(第一行无前置行,补FALSE),生成删除标记后取反筛选,同样能删除目标行。
内容的提问来源于stack exchange,提问作者blake.struthers
相关产品推荐
相关产品推荐

