You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言移除含特定字符串行时结果为空的问题求助

问题:移除数据框中含特定字符串的行时意外清空所有内容

输入数据

# 数据框PKV的内容:
   ID Aufzeichnungen                                                                 
   <dbl> <chr>                                                                          
 1     1 "Aufzeichnungen"                                                               
 2     1 "07.03.22   A: stechender Schmerz"                                             
 3     1 "    scharfkantig"                                                              
 4     1 "D/B:"                                                                          
 5     1 "T:"                                                                            
 6     1 "pat aht an 36 üz distal"                                                      
 7     1 " seit paartagen"                                                              
 8     1 "36 vipr++"                                                                     
 9     1 " perk-"                                                                       
10     1 " keine c zu entdekcne"                                                        
11     1 "üz bilfuird"                                                                  
12     1 "pat aufgekläörtggf  RÖ um c auszuschileßen"                                   
13     1 " pat verweigert RÖ aus Angst vor Strahlung"                                   
14     1 " pat"                                                                        
15     1 "aufgeklärt angst nicht nötig und c unter fllg oder apprx nicht auszuschließen"
16     1 ""                                                                             
17     1 "pat knirscht"                                                                  
18     1 " schiene empohlen"                                                            
19     1 " pat meldet sich.."

待移除的字符串规则

定义正则匹配的字符串列表:

remove_list <- paste(c("einverst", "empf", "raten", "aufgeklä", "nicht", "weiß nicht", "bespr", "soll",
                       "kein", "?", "raten", "klären", "überprüf", "erst, wenn", "verweiger", 
                       "notwendig"), collapse = '|')

预期与实际结果

  • 预期:仅移除包含上述字符串的行(行10、12、13、15)
  • 实际:所有行被移除,输出空数据框:
# A tibble: 0 × 2
# Groups:   ID [0]
# … with 2 variables: ID <dbl>, Aufzeichnungen <chr>

尝试过的代码

# base R方法
removed <-  PKV[grep(remove_list, PKV$Aufzeichnungen, invert = TRUE), ]

# dplyr方法(出错的关键所在)
removed <- PKV %>% filter(!grepl(remove.list, PKV$Aufzeichnungen ))

解决方案

核心错误:变量名拼写错误

你在dplyr代码里写的是remove.list,但定义的变量是remove_list(下划线和点混淆)。未定义的remove.list会被当作空字符串,grepl("", x)对所有非NA字符串都返回TRUE,因此!grepl(...)全为FALSE,导致所有行被过滤。

修正后的代码

1. base R 版本

# 添加ignore.case = TRUE可处理大小写差异(可选)
removed <- PKV[grep(remove_list, PKV$Aufzeichnungen, invert = TRUE, ignore.case = TRUE), ]

2. dplyr + grepl 版本

library(dplyr)
removed <- PKV %>% 
  filter(!grepl(remove_list, Aufzeichnungen, ignore.case = TRUE))

3. dplyr + stringr 版本

library(dplyr)
library(stringr)
removed <- PKV %>% 
  filter(!str_detect(Aufzeichnungen, regex(remove_list, ignore_case = TRUE)))

额外说明

  • ignore.case = TRUE是可选参数,用于匹配大小写不同的目标字符串(比如避免漏删首字母大写的"Aufgeklärt")
  • 空字符串行(行16)不会被当前remove_list匹配,会保留在结果中;如果需要移除空行,可以额外添加filter(Aufzeichnungen != "")

内容的提问来源于stack exchange,提问作者KC-Migo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 22:57:27