如何简便过滤R语言数据框中含LE/GE等前缀的行?
问题描述
我有一个包含名为Value变量的数据框,该变量中存在数值区间(如90-94),但也有带LT、GE、LE等前缀的内容。我希望过滤掉带有这些前缀的行,仅保留数值区间。
最初尝试匹配带空格的前缀但无效,代码如下:
OHperformance <- OHperformance %>% filter(Value != ".", Value !="PS", Value !="LT ", Value !="GE ", Value != "LE ")
后来通过列举所有具体值实现了过滤,但这种方法不够简便:
OHperformance <- OHperformance %>% filter(!Value %in% c("LT50", "LE5", "LE20", "LE10", "GE95", "GE90", "GE80", "GE50", ".", "PS"))
请问有没有更简便的方法来剔除含LE或GE前缀的行?
简便解决方案
直接用正则表达式就能一次性过滤掉所有以LT/LE/GE开头的行,不用逐个列举具体值,效率高多了。这里提供两种实现方式:
方式一:结合dplyr和stringr
先加载必要的包:
library(dplyr) library(stringr) OHperformance <- OHperformance %>% filter(Value != ".", Value != "PS", # 排除以LT、LE、GE开头的所有内容 !str_detect(Value, "^(LT|LE|GE)"))
方式二:用基础R的grepl函数
如果不想额外安装stringr包,用基础R自带的grepl函数也能实现:
OHperformance <- OHperformance %>% filter(Value != ".", Value != "PS", !grepl("^(LT|LE|GE)", Value))
正则表达式说明
^:表示匹配字符串的开头位置,确保只匹配前缀而非中间出现的字符(LT|LE|GE):表示匹配LT、LE、GE中的任意一个前缀
不管这些前缀后面跟着数字还是其他字符,只要是以这三个前缀开头的行,都会被过滤掉,完美替代逐个列举值的繁琐写法。
内容的提问来源于stack exchange,提问作者poole13
相关产品推荐
相关产品推荐

