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

时间:2018-06-19 00:41:02

标签: r dataframe row na

我正在尝试使用整个df的NA来计算行数,因为我想要计算NA的行数占df总行数的百分比。

我已经看过这篇文章:Determine the number of rows with NAs但它只显示了一系列特定的列。

2 个答案:

答案 0 :(得分:3)

tl; dr:行,你想要sum(!complete.cases(DF)),或等同于sum(apply(DF, 1, anyNA))

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

其中大多数都是从逻辑数据框开始,TRUENA,其他地方为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