4

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

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

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

对于没有NA. 对于包含NAI 的列,可以计算NAs的数量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
4

6 回答 6

7

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

尝试:

sum(mydata[,3]=="A", na.rm=TRUE)
于 2012-03-22T09:36:18.493 回答
3

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

colSums(!is.na(mydata))
于 2014-01-11T15:19:26.947 回答
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)
于 2012-03-22T11:46:20.400 回答
0

另一种可能性是将列转换为因子,然后使用函数摘要。例子:

vec<-c("A","B","A",NA)

摘要(as.factor(vec))

于 2015-01-26T15:50:18.890 回答
0

一种快速的方法是对变量进行汇总统计:

表(mydata$my_variable)的摘要(mydata$my_variable)

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

希望这可以帮助

于 2015-03-11T05:41:55.267 回答
-1

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

于 2012-03-22T09:37:44.540 回答