R 检查数据帧中是否存在一个包含所有'NA'的行`
检查数据帧中是否存在包含所有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(
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)))