2012-03-22 46 views
3

我在R工作,我有一個矩陣「A」,「B」和NA值,我想要計算「 A「或」B「或NA值。滿足R中NA值列的元素的數量

總和(MYDATA [,I] == 「A」) 和 總和(MYDATA [,I] == 「B」) 工作得很好列的無NA。 對於包含NA的列,我可以使用sum(is.na(mydata [,i]) 來計算NA的數量,但在這些列中sum(mydata [,i] ==「A」)會返回NA 。 的數量我怎麼能算的 「A」 值列包含NA值數

感謝您的幫助

例子:?!

> mydata 
    V1 V2 V3 V4 
V2 "A" "A" "A" "A" 
V3 "A" "A" "A" "A" 
V4 "B" "B" NA NA 
V5 "A" "A" "A" "A" 
V6 "B" "A" "A" "A" 
V7 "B" "A" "A" "A" 
V8 "A" "A" "A" "A" 
> sum(mydata[,2]=="A") 
[1] 6 
> sum(mydata[,3]=="A") 
[1] NA 
> sum(is.na(mydata[,3])) 
[1] 1 

回答

5

功能sum(如R中的許多其他數學函數)採用參數na.rm。如果設置na.rm=TRUE,R在進行計算之前刪除所有的NA值。

嘗試:

sum(mydata[,3]=="A", na.rm=TRUE) 
-1

您可以使用table一次計算所有值。

+0

如果您指定了HOW ... – 2015-11-05 16:14:22

0

爲了擴大從@Andrie答案,

mydata <- matrix(c(rep("A", 8), rep("B", 2), rep(NA, 2), rep("A", 4), 
    rep(c("B", "A", "A", "A"), 2), rep("A", 4)), ncol = 4, byrow = TRUE) 

myFun <- function(x) { 
    data.frame(n.A = sum(x == "A", na.rm = TRUE), n.B = sum(x == "B", 
    na.rm = TRUE), n.NA = sum(is.na(x))) 
} 

apply(mydata, 2, myFun) 
3

不知道這是否是你所追求的。 RnewB也是如此,檢查這是否工作。 行數和你的行數之間的差異會告訴你NA項目的數量。

colSums(!is.na(mydata)) 
0

另一種可能性是轉換一個因子中的列,然後使用函數摘要。例如:

VEC < -c( 「A」, 「B」, 「A」,NA)

摘要(as.factor(VEC))

0

一個快速的方法做到這一點是爲變量做彙總統計:表(MYDATA $ my_variable)的

摘要(MYDATA $ my_variable)

這會給你缺少變量的數目。

希望這會有所幫助