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

如何在R语言中过滤数据框:保留至少含一个数值的行

R数据框过滤:保留至少含一个数值型值的行

给定数据框A,包含SN、Sample1、Sample2三列,其中Sample1和Sample2的值仅为两种类型:数值型,或表示无法采样的文本型。需求是保留至少有一列是数值型的行,即过滤掉两列全为文本的行。

基础R实现方法

方法1:逻辑或直接判断

直接对两列分别判断是否可转为数值(转数值后非NA即为数值型),用逻辑或|组合条件,满足任一条件就保留该行:

# 过滤数据框
A_filtered <- A[!is.na(as.numeric(A$Sample1)) | !is.na(as.numeric(A$Sample2)), ]

方法2:apply逐行判断

通过apply对每行的目标列进行批量判断,any()函数确保只要有一列符合数值型条件就保留该行:

# 定义判断函数:是否为可转数值的类型
is_numeric <- function(x) !is.na(as.numeric(x))

# 过滤数据框
A_filtered <- A[apply(A[, c("Sample1", "Sample2")], 1, function(row) any(is_numeric(row))), ]

dplyr包实现方法

如果习惯用tidyverse系列工具,dplyr的filter()函数写法更简洁直观:

library(dplyr)

A_filtered <- A %>%
  filter(!is.na(as.numeric(Sample1)) | !is.na(as.numeric(Sample2)))

验证示例

假设输入数据框如下:

A <- data.frame(
  SN = 1:4,
  Sample1 = c("无法采样", 123, 456, "未采集"),
  Sample2 = c("无数据", 789, "无法采样", 101112),
  stringsAsFactors = FALSE
)

经过过滤后,会移除第1行(两列均为文本),保留其余3行,完全符合需求规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 07:50:29