如何用R语言的grep/grepl匹配含单独数字1的行(排除11等)
筛选包含单独数字1的行(排除多位数1的行)
假设某数据框的X1列包含如下字符串数据:
X1 1, 2, 3, 4, 5, 6 0, 1, 11, 2, 3 11, 111, 1111, 11111, 1111111 11, 111, 1111, 1, 111111, 1111111
可通过以下代码读取该数据:
df <- read.table(text="X1 1, 2, 3, 4, 5, 6 0, 1, 11, 2, 3 11, 111, 1111, 11111, 1111111 11, 111, 1111, 1, 111111, 1111111", sep="\t", header=TRUE)
需求是用grep或grepl函数筛选出包含单独数字1的行,排除仅含11、111这类多位数1的行。
期望结果
保留以下行:
X1 1, 2, 3, 4, 5, 6 0, 1, 11, 2, 3 11, 111, 1111, 1, 111111, 1111111
排除此行:
11,111,1111,11111,1111111
解决方法
使用正则表达式精准匹配单独的数字1,确保匹配的1前后是分隔符(逗号加空格)或字符串的开头/结尾,避免误匹配多位数里的1。
用grepl筛选
# 筛选符合条件的行 filtered_df <- df[grepl("(^|, )1(, |$)", df$X1), ]
用grep筛选
filtered_df <- df[grep("(^|, )1(, |$)", df$X1), ]
正则说明
(^|, ):匹配字符串的开头,或者,(逗号加空格)作为前缀1:精准匹配单独的数字1(, |$):匹配,(逗号加空格)作为后缀,或者字符串的结尾
这样就能准确筛选出包含单独数字1的行,排除仅含多位数1的行。
内容的提问来源于stack exchange,提问作者Gabriel G.
相关产品推荐
相关产品推荐

