如何在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
相关产品推荐
相关产品推荐

