假设我有一个data.frame
,如下所示:
a b c
1 5 NA 6
2 NA NA 7
3 6 5 8
我想找出每一列的长度,不包括NA。答案应该看起来像
a b c
2 1 3
到目前为止,我已经尝试过:
!is.na() # Gives TRUE/FALSE
length(!is.na()) # 9 -> Length of the whole matrix
dim(!is.na()) # 3 x 3 -> dimension of a matrix
na.omit() # removes rows with any NA in it.
请告诉我怎样才能得到要求的答案。
或更快:
colSums(!is.na(dat))
a b c
2 1 3
虽然求和可能是一个更快的解决方案,但我认为length(x[!is.na(x)])
更可读。
> apply(dat, 2, function(x){sum(!is.na(x))})
a b c
2 1 3
我尝试了NCOL而不是NCOL,它成功了。
> nrow(tsa$Region)
NULL
> NROW(tsa$Region)
[1] 27457
> ncol(tsa$Region)
NULL
> NCOL(tsa$Region)
[1] 1
如果您想在整个数据帧中计数非NA值,以下内容将有所帮助。
sum(!is.na(df))
[1] 3
然后对每列中的非NA值进行计数,如下
colSums(!is.na(df))
a b c
2 1 3