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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:26:07