8

假设我有一个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.

请告诉我如何获得所需的答案。

4

4 回答 4

11

或者更快:

colSums(!is.na(dat))
a b c 
2 1 3 
于 2013-07-06T07:25:48.200 回答
3
> apply(dat, 2, function(x){sum(!is.na(x))})
a b c 
2 1 3 
于 2013-07-06T07:21:47.843 回答
1

尽管总和可能是一个更快的解决方案,但我认为这length(x[!is.na(x)])更具可读性。

于 2017-06-22T12:35:16.467 回答
0

我尝试了 NCOL 而不是 ncol 并且它有效。

> nrow(tsa$Region)
NULL
> NROW(tsa$Region)
[1] 27457


> ncol(tsa$Region)
NULL
> NCOL(tsa$Region)
[1] 1
于 2018-04-13T06:23:59.277 回答