如何在data.frame中找到NA的百分比?

时间:2014-05-11 19:47:17

标签: r csv dataframe na

我试图找到列中以及整个数据帧内的NAs百分比:

我评论的第一个方法给了我零,第二个没有评论的方法给了我一个矩阵。不确定我错过了什么。真的很感激任何暗示!

cp.2006<-read.csv(file="cp2006.csv",head=TRUE)

#countNAs <- function(x) { 
#  sum(is.na(x)) 
#} 
#total=0
#for (i in col(cp.2006)) {
#  total=countNAs(i)+total
#}
#print(total)
count<-apply(cp.2006, 1, function(x) sum(is.na(x)))
dims<-dim(cp.2006)
num<-dims[1]*dims[2]
NApercentage<-(count/num) * 100
print(NApercentage)

6 个答案:

答案 0 :(得分:17)

x = data.frame(x = c(1, 2, NA, 3), y = c(NA, NA, 4, 5))

对于整个数据框:

sum(is.na(x))/prod(dim(x))

或者

mean(is.na(x))

对于列:

apply(x, 2, function(col)sum(is.na(col))/length(col))

或者

colMeans(is.na(x))

答案 1 :(得分:4)

您还可以使用dplyr::summarize_all作为按列比例。

x %>% summarize_all(funs(sum(is.na(.)) / length(.)))

哪个会给出

     x   y
1 0.25 0.5

答案 2 :(得分:2)

如果您有兴趣找到完整病例的百分比。

使用相同示例mentioned here.

x = data.frame(x = c(1, 2, NA, 3), y = c(NA, NA, 4, 5))

输出:

   x  y
1  1 NA
2  2 NA
3 NA  4
4  3  5

查找完整案例:

complete.cases(x)

输出:

[1] FALSE FALSE FALSE  TRUE

完整病例的百分比:

mean(complete.cases(x))

输出:

[1] 0.25

这意味着提供的数据中有25%的完整行可用。即仅完成第四行,其余全部包含NA值。

干杯!

答案 3 :(得分:0)

不再支持Fun的dplyr的更新版本:

x%>% summarise_all(list(name = ~sum(is.na(.))/length(.)))

答案 4 :(得分:0)

您可以尝试

colMeans(is.na.data.frame(dataframe_name))

答案 5 :(得分:0)

尝试一下:

sapply(data, function(y) round((sum(length(which(is.na(y))))/nrow(data))*100.00,2))