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

如何筛选DataFrame中所有列均无'Unknown'值的行?

筛选DataFrame中所有列均无'Unknown'值的行

示例数据

先构造你提供的示例DataFrame:

mydf <- data.frame(
  name = c("Dave", "John", "Steve", "Mark"),
  age = c("54", "Unknown", "34", "38"),
  height = c("180", "Unknown", "182", "178"),
  job = c("Y", "Unknown", "Y", "Y"),
  city = c("London", "Unknown", "Birmingham", "Unknown"),
  stringsAsFactors = FALSE
)

解决方案

下面提供几种实用的实现方法:

方法1:Base R + apply + all

你之前用all出错是因为没按行维度应用函数,正确写法如下:

mynewdf <- mydf[apply(mydf != "Unknown", 1, all), ]
  • mydf != "Unknown" 生成布尔矩阵,标记每个元素是否非'Unknown'
  • apply(..., 1, all) 按行(参数1代表行)执行all函数,判断该行所有元素是否都为TRUE
  • 最后用生成的布尔向量对原DataFrame做子集筛选

方法2:Base R + rowSums(更高效)

针对大数据集,用rowSums统计每行的'Unknown'数量,筛选数量为0的行性能更好:

mynewdf <- mydf[rowSums(mydf == "Unknown") == 0, ]
  • rowSums(mydf == "Unknown") 统计每行中'Unknown'的个数
  • 筛选个数为0的行,就是所有列都无'Unknown'的目标行

方法3:tidyverse(dplyr)

如果习惯用dplyr,可以用if_all函数简洁实现:

library(dplyr)
mynewdf <- mydf %>% 
  filter(if_all(everything(), ~ . != "Unknown"))
  • everything() 指定检查所有列
  • if_all(..., ~ . != "Unknown") 确保所有列都满足非'Unknown'的条件
  • filter 保留符合条件的行

最终结果

执行任意方法后,得到的mynewdf如下:

> mynewdf
   name age height job        city
1  Dave  54    180   Y      London
3 Steve  34    182   Y Birmingham

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 09:35:00