如何用 NAs - R 简单地计算行数

How to simply count number of rows with NAs - R

我正在尝试计算整个 df 中具有 NA 的行数,因为我希望计算具有 NA 的行占 df 总行数的百分比。

我已经看过这个 post:Determine the number of rows with NAs 但它只显示特定范围的列。

tl;dr:行明智,你会想要 sum(!complete.cases(DF)),或者,等价地,sum(apply(DF, 1, anyNA))

有许多不同的方法可以查看数据框中 NA 值的数量、比例或位置:

其中大部分以逻辑数据框开始,每个 NATRUE,其他地方为 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

来自示例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