8

我试图找到一种简单的方法来计算数据框列中的非缺失案例。我已经使用了以下功能:

foo<- function(x) { sum(!is.na(x)) }

然后通过 sapply() 将其应用于数据帧

stats$count <- sapply(OldExaminee, foo2, simplify=T)

虽然这工作正常,但我只是不相信没有更简单的计数方法,即基本函数集中的东西。

有任何想法吗?

4

3 回答 3

15

对于 adata.frame你可以使用colSumsand得到它is.na

set.seed(45)
df <- data.frame(matrix(sample(c(NA,1:5), 50, replace=TRUE), ncol=5))
#    X1 X2 X3 X4 X5
# 1   3  2 NA  2 NA
# 2   1  5  1  1  4
# 3   1  1  3  2  3
# 4   2  2  3  5  3
# 5   2  2  5  2  2
# 6   1  2 NA  3  3
# 7   1  5  5  5  2
# 8   3 NA  4  1  5
# 9   1  2  3 NA  1
# 10 NA  1  1  2  2

colSums(!is.na(df))
# X1 X2 X3 X4 X5 
#  9  9  8  9  9 
于 2013-03-29T15:15:27.330 回答
7

你可以使用 na.omit

length(na.omit(x));

连同申请,因为 caelorus 的帖子表明

于 2013-03-29T14:12:07.660 回答
0

您可以使用whichlength

length(which(!is.na(x$col)))

which返回匹配元素的索引(在本例中为非NAs),并length告诉您这些索引有多少。

一次对所有列:

apply(OldExaminee, 2, function(x){ length(which(!is.na(x))) })
于 2013-03-29T13:55:51.797 回答