2011-02-13 45 views
21

說我有下列R- data.frameZZZ統計數據幀中的非NAs;得到的答案作爲載體

(ZZZ <- structure(list(n = c(1, 2, NA), m = c(6, NA, NA), o = c(7, 8, 
8)), .Names = c("n", "m", "o"), row.names = c(NA, -3L), class = "data.frame")) 

## not run 
    n m o 
1 1 6 7 
2 2 NA 8 
3 NA NA 8 

我想知道,在一個載體,有多少非NAS我已經得到形式。我想要的答案提供給我的:

2, 1, 3 

當我使用命令length(ZZZ),我得到3,這當然是向量在data.frame數量,一個寶貴的足夠的資料片。

我還有其他的功能,在這個data.frame上運行,並給出答案的矢量形式,但是,dang-it,長度並不像這樣操作。

回答

29

試試這個:

# define "demo" dataset 
ZZZ <- data.frame(n=c(1,2,NA),m=c(6,NA,NA),o=c(7,8,8)) 
# apply the counting function per columns 
apply(ZZZ, 2, function(x) length(which(!is.na(x)))) 

有運行:

> apply(ZZZ, 2, function(x) length(which(!is.na(x)))) 
n m o 
2 1 3 

如果你真的堅持返回一個向量,你可以使用as.vector,例如通過定義這個功能:

nonNAs <- function(x) { 
    as.vector(apply(x, 2, function(x) length(which(!is.na(x))))) 
    } 

你可以簡單地運行nonNAs(ZZZ)

> nonNAs(ZZZ) 
[1] 2 1 3 
1

如果你只是想總和來港整體,然後總和()與is.na(的)會做:

ZZZ <- data.frame(n = c(1, 2, NA), m = c(6, NA, NA), o = c(7, 8, 8)) 
sum(!is.na(ZZZ)) 
+0

varible我覺得OP在數據框中的每個**列**的總數**之後。 – daroczig 2011-02-13 19:06:16

+0

好點。我沒有仔細閱讀。 – kmm 2011-02-13 19:09:17

63
colSums(!is.na(x)) 

矢量化FTW。

5

爲了得到總沒有缺失值的總和使用(is.na(X))和科拉姆明智使用colSums(is.na(X)),其中x是包含數據集