我正在尝试使用整个df的NA来计算行数,因为我想要计算NA的行数占df总行数的百分比。
我已经看过这篇文章:Determine the number of rows with NAs但它只显示了一系列特定的列。
答案 0 :(得分:3)
tl; dr:行,你想要sum(!complete.cases(DF))
,或等同于sum(apply(DF, 1, anyNA))
有多种不同方法可以查看数据框中NA
值的数量,比例或位置:
其中大多数都是从逻辑数据框开始,TRUE
为NA
,其他地方为FALSE
。对于基础数据集airquality
is.na(airquality)
此数据集中有44个NA
值
sum(is.na(airquality))
# [1] 44
您可以查看每行或每列NA
值的总数:
head(rowSums(is.na(airquality)))
# [1] 0 0 0 0 2 1
colSums(is.na(airquality))
# Ozone Solar.R Wind Temp Month Day
37 7 0 0 0 0
您也可以使用anyNA()
代替is.na()
:
# by row
head(apply(airquality, 1, anyNA))
# [1] FALSE FALSE FALSE FALSE TRUE TRUE
sum(apply(airquality, 1, anyNA))
# [1] 42
# by column
head(apply(airquality, 2, anyNA))
# Ozone Solar.R Wind Temp Month Day
# TRUE TRUE FALSE FALSE FALSE FALSE
sum(apply(airquality, 2, anyNA))
# [1] 2
complete.cases()
可以使用,但只能按行显示:
sum(!complete.cases(airquality))
# [1] 42
答案 1 :(得分:1)
来自示例here:
DF <- read.table(text=" col1 col2 col3
1 23 17 NA
2 55 NA NA
3 24 12 13
4 34 23 12", header=TRUE)
您可以检查哪些行至少有一个NA:
(which_nas <- apply(DF, 1, function(X) any(is.na(X))))
# 1 2 3 4
# TRUE TRUE FALSE FALSE
然后计算它们,识别它们或获得比率:
## Identify them
which(which_nas)
# 1 2
# 1 2
## Count them
length(which(which_nas))
#[1] 2
## Ratio
length(which(which_nas))/nrow(DF)
#[1] 0.5