R语言新手使用filter()过滤含*与#的数据报错求助
R数据框过滤:移除包含*和#的行
问题分析
你当前的错误是因为filter()函数需要逻辑判断表达式,而非直接传入要过滤的字符。filter('*', '#')这种写法不符合语法,所以会报错'must be a logical vector, not the string "*"'。
正确过滤方法
根据你的需求(移除包含*或#的行),分三种场景给出解决方案:
场景1:移除任意列中包含*/#的行
如果只要行内有任意单元格包含*(包括**)或#,就移除该行,使用if_all()结合正则匹配:
library(dplyr) library(readxl) data <- read_excel("E:/editing v2/AverageIncome.xlsx") # 保留所有列都不包含*或#的行 filtered_data <- data %>% filter(if_all(everything(), ~ !grepl("[*#]", .x))) filtered_data
grepl("[*#]", .x):检查单个单元格是否包含*或#!:取反,表示"不包含"if_all(everything(), ...):要求数据框的所有列都满足该条件
场景2:仅移除指定列中包含*/#的行
如果只需要检查特定列(比如薪资相关列),可以指定列名:
filtered_data <- data %>% filter(if_all(c(TotalEmployment, Emp_Prse, H_Mean, A_Mean), ~ !grepl("[*#]", .x)))
场景3:精确匹配单个*/#/**
如果要移除单元格正好是*、#或**的行(而非包含这些符号),用%in%精确匹配:
filtered_data <- data %>% filter(if_all(everything(), ~ !(.x %in% c("*", "#", "**"))))
注意
你的示例数据中所有行都包含*或#,所以过滤后会得到空数据框,这是正常结果;实际数据中若存在符合条件的行,会被保留。
内容的提问来源于stack exchange,提问作者chickenwings11
相关产品推荐
相关产品推荐

