0

私は R で作業していてABと の値を持つ行列を持っています。すべての列のまたは値の数を数えて、結果をテーブルに挿入しNAたいと思います。以下のコードを使用して、、およびを説明しました。ABNAABNA

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))ヘッダーのみのテーブルとしてデータフレームに挿入する必要があります。

4

2 に答える 2

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

于 2013-04-17T04:46:25.457 に答える
0

plyrand adplyorを使用するのが最も簡単だと思いますldply

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
于 2013-04-17T04:11:52.323 に答える