R语言:统计数据框含指定字符串的行并排除含特定字符串的行
解决R数据框中统计含指定单词且排除另一单词的行的问题
嘿,我来帮你搞定这个需求!你已经用grepl实现了统计含"instance"的行,现在要排除同时包含"find"的行,只需要把两个匹配条件用逻辑运算组合起来就可以轻松实现。
核心思路
我们需要同时满足两个条件:
- 行文本包含"instance"(不区分大小写)
- 行文本不包含"find"(不区分大小写)
用grepl分别判断这两个条件,再用逻辑与(&)把它们组合起来,就能得到我们需要的结果。
完整代码实现
首先先还原你的原始数据框:
words <- c("INSTANCE find", "LA LA LA", "instance during", "instance", "instance", "instance", "find instance") df <- data.frame(words)
然后添加标记列,统计符合条件的行:
# 标记包含instance但不包含find的行(大小写不敏感) df$words_count <- grepl("instance", df$words, ignore.case = TRUE) & !grepl("find", df$words, ignore.case = TRUE)
代码解释
grepl("instance", df$words, ignore.case = TRUE):检查每行是否包含"instance",ignore.case = TRUE让匹配不区分大小写,返回布尔值(TRUE/FALSE)!grepl("find", df$words, ignore.case = TRUE):!表示取反,也就是检查每行不包含"find",同样不区分大小写&:逻辑与运算符,只有当两个条件都为TRUE时,最终结果才是TRUE
查看结果
运行代码后,打印数据框就能看到标记效果:
print(df)
输出结果:
words words_count 1 INSTANCE find FALSE 2 LA LA LA FALSE 3 instance during TRUE 4 instance TRUE 5 instance TRUE 6 instance TRUE 7 find instance FALSE
扩展:直接筛选符合条件的行
如果你不想只是标记,而是直接提取这些行,可以用下面的代码:
# 筛选出包含instance且不含find的行 filtered_df <- df[grepl("instance", df$words, ignore.case = TRUE) & !grepl("find", df$words, ignore.case = TRUE), ]
内容的提问来源于stack exchange,提问作者Kalenji
相关产品推荐
相关产品推荐

