MC是一个非常大的矩阵,1E6行(或更多)和500列。我试图获得每列的值1到13的出现次数。有时,其中一个值的出现次数将为零。我希望我的最终输出是具有这些计数值的300X13矩阵(或数据帧)。我想知道是否有人可以建议一种比我现有的更有效的方式,具体如下:
MCct<-matrix(0,500,13)
for (j in 1:500){
for (i in 1:13){
MCct[j,i]<-length(which(MC[,j]==i))}}
我不知道那个表是否有效,因为我还需要知道是否发生了零事件......如果可能的话,我无法弄清楚如何做到这一点。而且我对申请只有一点熟悉,所以也许有一种方法可以使用...我还没有成功解决这个问题。
感谢您的帮助, 费雯丽
答案 0 :(得分:4)
您可以使用sapply
(从1到13进行迭代)和colSums
(以添加j
列)来执行此操作:
MCct <- sapply(1:13, function(i) {
colSums(MC == i)
})
答案 1 :(得分:1)
假设您有一组您对
感兴趣的值set <- 1:4
n = length(set)
你有一个矩阵包含那些值,其他
m <- matrix(sample(10, 120, TRUE), 12, 10)
创建一个向量,指示每个匹配值集合中的索引
idx <- match(m, set)
然后使索引对每列唯一
idx <- idx + (col(m) - 1) * n
idx
的范围从1(第一列中第一个设置元素的出现次数)到n * ncol(m)
(m的最后一列中出现第n个设置元素)。制表idx
v <- tabulate(idx, nbin = n * ncol(m))
n
的第一个v
元素汇总了设置元素1..n出现在m
第一列中的次数。 n
的第二个v
元素汇总了设置元素1..n出现在m
的第二列等中的次数。重塑为所需的矩阵,其中每行代表相应的成员。
matrix(v, ncol=ncol(m))
答案 2 :(得分:0)
table
可以计算零次出现,您只需要创建一个具有整个级别范围的因子,例如
apply(MC, 2, function(x) table(factor(x, levels=1:13)))
这不如@Patronus的解决方案那么有效。