有什么方法可以删除没有所有数值的数据行吗?

Is there any way to delete the rows of data which don't have all numeric values?

我的数据有两列。每列数据都有数值,但有些数据没有任何数值。我想删除不具有所有数值的行。实际上,数据有 1000 行,但为了简化,我在这里将数据文件制作得更小。谢谢!

a <- c(1, 2, 3, 4, "--")
b <- c("--", 2, 3, "--", 5)
data <- data.frame(a, b) 

一个更简单的选择是在使用 as.numeric 转换为 numeric 后检查 NA。如果元素不是数字,它是 returns NA 并且可以用 is.na 检测并在 filter_all 中使用它来删除行

library(dplyr)
data %>%
    filter_all(all_vars(!is.na(as.numeric(.))))
#  a b
#1 2 2
#2 3 3

如果我们不喜欢这些警告,一个选项是通过检查一个或多个数字 ([0-9.]+) 包括从头开始的点 (^) 来检测带有正则表达式的仅数字元素以 str_detect

结束 ($) 字符串
library(stringr)
data %>% 
    filter_all(all_vars(str_detect(., "^[0-9.]+$")))
#  a b
#1 2 2
#2 3 3

如果我们只有 -- 作为非数字,则更容易删除

data[!rowSums(data == "--"),]
#  a b
#2 2 2
#3 3 3

数据

data <- data.frame(a,b, stringsAsFactors = FALSE)

一个base R选项可以是:

data[!is.na(Reduce(`+`, lapply(data, as.numeric))), ]

  a b
2 2 2
3 3 3

并且要导入数据,请使用 stringsAsFactors = FALSE

或使用sapply():

data[!is.na(rowSums(sapply(data, as.numeric))), ]