有什么方法可以删除没有所有数值的数据行吗?
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))), ]
我的数据有两列。每列数据都有数值,但有些数据没有任何数值。我想删除不具有所有数值的行。实际上,数据有 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))), ]