从R中大型矩阵的行中计算指定值的快速方法

从R中大型矩阵的行中计算指定值的快速方法,r,R,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))}} MCct您可以使用sapply(从1迭代到13

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

MCct您可以使用
sapply
(从1迭代到13)和
colSums
(将
j
的列相加):


MCct您可以使用
sapply
(从1迭代到13)和
colSums
(将
j
的列相加):


MCct
可以计算零次出现,您只需要创建一个具有整个级别范围的因子,例如

apply(MC, 2, function(x) table(factor(x, levels=1:13)))

但这并不像@Patronus解决方案那样有效。

表可以计算零次出现,您只需要创建一个具有整个级别范围的系数,例如

apply(MC, 2, function(x) table(factor(x, levels=1:13)))

但这并不像@Patronus解决方案那样有效。

假设您有一组感兴趣的值

set <- 1:4
n = length(set)
v
的第一个
n
元素汇总了设置元素1..n出现在
m
的第一列中的次数。
v
的第二个
n
元素汇总了集合元素1..n出现在
m
的第二列中的次数,以此类推。将其重塑为所需的矩阵,其中每行表示集合的相应成员

matrix(v, ncol=ncol(m))

假设您有一组感兴趣的值

set <- 1:4
n = length(set)
v
的第一个
n
元素汇总了设置元素1..n出现在
m
的第一列中的次数。
v
的第二个
n
元素汇总了集合元素1..n出现在
m
的第二列中的次数,以此类推。将其重塑为所需的矩阵,其中每行表示集合的相应成员

matrix(v, ncol=ncol(m))

您还可以将对
apply
函数的调用替换为
colSums(MC==i)
,我认为这会更快。谢谢您的帮助!您还可以将对
apply
函数的调用替换为
colSums(MC==i)
,我认为这会更快。谢谢您的帮助!谢谢你的回答!谢谢你的回答!谢谢你的回答!谢谢你的回答!
v <- tabulate(idx, nbin = n * ncol(m))
matrix(v, ncol=ncol(m))