R 检查数据帧中是否存在一个包含所有'NA'的行`

R 检查数据帧中是否存在一个包含所有'NA'的行`,r,dataframe,R,Dataframe,检查数据帧中是否存在包含所有NA的行。例如,此数据帧的答案为“是”: my.df <- data.frame(a=c(1, NA, 3), b=c(5, NA, NA)) 但以下情况并非如此 my.df2 <- data.frame(a=c(1, 2, 3), b=c(5, NA, NA)) 一个选项是创建一个函数,该函数将数据转换为逻辑矩阵is.na,获取na元素的行和,检查它是否等于列数,并换行(如果有任何行满足此条件) f1 <- function(dat) any(

检查数据帧中是否存在包含所有NA的行。例如,此数据帧的答案为“是”:

my.df <- data.frame(a=c(1, NA, 3), b=c(5, NA, NA))
但以下情况并非如此

my.df2 <- data.frame(a=c(1, 2, 3), b=c(5, NA, NA))

一个选项是创建一个函数,该函数将数据转换为逻辑矩阵is.na,获取na元素的行和,检查它是否等于列数,并换行(如果有任何行满足此条件)

f1 <- function(dat) any(rowSums(is.na(dat)) == ncol(dat))

f1(my.df)
#[1] TRUE
f1(my.df2)
#[1] FALSE

一个选项是创建一个函数,该函数将数据转换为逻辑矩阵is.na,获取na元素的行和,检查它是否等于列数,并换行(如果有任何行满足此条件)

f1 <- function(dat) any(rowSums(is.na(dat)) == ncol(dat))

f1(my.df)
#[1] TRUE
f1(my.df2)
#[1] FALSE
另一个选择是:

#Code
myfun <- function(x)
{
  y <-apply(x,1,function(x) length(which(is.na(x))))
  any(y==ncol(x))
}
#Apply
myfun(my.df)
myfun(my.df2)
另一个选择是:

#Code
myfun <- function(x)
{
  y <-apply(x,1,function(x) length(which(is.na(x))))
  any(y==ncol(x))
}
#Apply
myfun(my.df)
myfun(my.df2)
您可以使用行总和和is.na:

如果数据帧的列数可变,则可以使用长度:

您可以使用行总和和is.na:

如果数据帧的列数可变,则可以使用长度:


另一个基本R选项是使用any+Reduce+asplit


其中df是输入数据。frame

另一个base R选项使用any+Reduce+asplit

其中df是输入data.frame

allNA <- apply(my.df, 1, function(x) all(is.na(x)))
allNA
[1] FALSE  TRUE FALSE
sum(allNA) # determine if there is at least 1 allNA row
[1] 1
my.df[which(rowSums(is.na(my.df[]))==2),]
   a  b
2 NA NA
my.df[which(rowSums(is.na(my.df[])) == length(my.df)),]
any(Reduce("&", asplit(is.na(df), 2)))