计算符合NA值的列中符合条件的元素数

时间:2012-03-22 09:28:22

标签: r sum na

我有一个带有“A”,“B”和NA值的矩阵,我想计算每个值中“A”或“B”或NA的数量列。

sum(mydata[ , i] == "A")

sum(mydata[ , i] == "B")

适用于没有NA的列。对于包含NA的列,我可以使用NA计算sum(is.na(mydata[ , i])的数量。在这些列中,sum(mydata[ , i] == "A")会返回NA而不是数字。

如何计算包含NA值的列中“A”值的数量?

感谢您的帮助!

示例:

> 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

6 个答案:

答案 0 :(得分:7)

函数sum(与R中的许多其他数学函数一样)采用参数na.rm。如果设置na.rm=TRUE,则R会在执行计算之前删除所有NA值。

尝试:

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

答案 1 :(得分:3)

不确定这是不是你所追求的。 RnewB也是如此,检查这是否有效。 行数和行数之间的差异将告诉您NA项目的数量。

colSums(!is.na(mydata))

答案 2 :(得分: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 :(得分:0)

另一种可能性是在一个因子中转换列然后使用函数摘要。例如:

VEC&LT; -C(&#34; A&#34;&#34; B&#34;&#34; A&#34;,NA)

摘要(as.factor(VEC))

答案 4 :(得分:0)

快速执行此操作的方法是对变量执行摘要统计:

表格的汇总(mydata $ my_variable)(mydata $ my_variable)

这将为您提供缺失变量的数量。

希望这有帮助

答案 5 :(得分:-1)

您可以使用table一次统计所有值。