我正在尝试将table()函数应用于R中的矩阵。我想知道每列出现值(0,1)的频率。 如果列包含1和0,则没有问题。但是如果列仅包含1或仅包含0,则apply()将返回奇怪的列表而不是矩阵。
如何申请返回矩阵2中的矩阵,如示例1所示?
cURL error 35: SSL: CA certificate set, but certificate verification is disabled
编辑: 矩阵可以包含NA
答案 0 :(得分:3)
我推荐包matrixStats
,
library(matrixStats)
rbind(colCounts(good_mat, value = 0, na.rm = TRUE),
colCounts(good_mat, value = 1, na.rm = TRUE))
# [,1] [,2] [,3]
#[1,] 0 1 3
#[2,] 3 2 0
答案 1 :(得分:2)
基础解决方案:
m <- matrix(c(c(1,1,1),c(1,0,1),c(0,0,0)), 3,3, byrow=F)
rbind(nrow(m) - rowSums(m, na.rm = TRUE), rowSums(m, na.rm = TRUE))
[,1] [,2] [,3] [1,] 0 1 3 [2,] 3 2 0
或者
tmp <- colSums(m, na.rm = TRUE)
rbind(nrow(m) - tmp, tmp)
答案 2 :(得分:1)
以下是基础R解决方案,colSums
用于计算值,rbind
用于合并结果。
rbind((colSums(bad_mat == 0)), (colSums(bad_mat == 1)))
[,1] [,2] [,3]
[1,] 0 1 2
[2,] 3 2 1
或者,为了概括超过二进制值,您可以将其包含在lapply
中并将其提供给do.call
。只需将0:1
替换为所需的值即可。
do.call(rbind, lapply(0:1, function(i) colSums(bad_mat == i)))
[,1] [,2] [,3]
[1,] 0 1 2
[2,] 3 2 1