R语言:如何过滤数据框,保留两列相等行并排除特定前缀行?
解决方案
你可以通过**逻辑与(&)**组合两个过滤条件来实现需求:一是保留Current和Previous值相等的行,二是排除Previous值以指定前缀开头的行。以下提供两种常用的实现方式:
方法一:基础R语法
先修正你原代码的错误(原代码的子集化写法不正确),正确的基础R写法如下:
# 过滤条件:两列值相等,且Previous不以指定前缀开头 df <- df[df$Current == df$Previous & !grepl("^YJA|^NIO|^GRADE", df$Previous), ]
代码说明:
df$Current == df$Previous:筛选出两列值相等的行grepl("^YJA|^NIO|^GRADE", df$Previous):检测Previous是否以YJA/NIO/GRADE开头(^表示匹配字符串起始位置,|表示逻辑或)!:对上述检测结果取反,即排除符合前缀条件的行&:同时满足两个条件才保留该行
方法二:使用tidyverse工具(dplyr + stringr)
如果你习惯使用tidyverse生态,代码会更直观:
library(dplyr) library(stringr) df <- df %>% filter(Current == Previous, !str_detect(Previous, "^YJA|^NIO|^GRADE"))
代码说明:
filter()函数用于筛选行,多个条件用逗号分隔(默认逻辑与)str_detect()功能和grepl()类似,用于检测字符串是否匹配指定模式!同样用于排除匹配前缀的行
内容的提问来源于stack exchange,提问作者atm1984
相关产品推荐
相关产品推荐

