将列中元素的计数数插入到R中的表中

时间:2013-04-17 03:58:04

标签: r

我在R工作,我有一个包含ABNA值的矩阵,我想计算A的数量或每列中的BNA值,并将结果插入表中。我使用下面的代码来说明ABNA

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)))
}

count <- apply(mydata, 2, myFun)

现在,我需要将count (count <- apply(mydata, 2, myFun))的结果作为仅包含标题的表插入到数据框中。

2 个答案:

答案 0 :(得分:2)

在概念上与mnel的答案几乎完全相同,您也可以在基础R中尝试以下内容:

sapply(as.data.frame(mydata), 
       function(x) table(factor(x, levels = unique(as.vector(mydata))), 
                         useNA = "always"))
#      V1 V2 V3 V4
# A     4  6  6  6
# B     3  1  0  0
# <NA>  0  0  1  1

此处,我没有手动指定因子级别,而是使用了mydata中的数据。

答案 1 :(得分:0)

我认为最简单的使用plyradplyldply

您可以通过调用table替换myfun

library(plyr)
adply(mydata,2, function(x) table(factor(x, levels = c('A','B')), useNA = 'always'))
#   X1 A B NA
# 1  1 4 3  0
# 2  2 6 1  0
# 3  3 6 0  1
# 4  4 6 0  1

如果你有大量数据,那么plyr就不行了。 apply可以很好地运作

apply(mydata, 2, function(x) {
          xx <- table(factor(x, levels = c('A','B')), useNA = 'always')
          names(xx) <- c('nA','nB', 'nNA')
          xx}) 


   [,1] [,2] [,3] [,4]
nA     4    6    6    6
nB     3    1    0    0
nNA    0    0    1    1