2017-05-04 91 views
0

MC是一個非常大的矩陣,1E6行(或更多)和500列。我正在嘗試爲每列獲取值1到13的出現次數。有時候,其中一個值的出現次數將爲零。我希望我的最終輸出是具有這些計數值的300X13矩陣(或數據幀)。我想知道如果任何人都可以提出一個更有效的方式那麼我現在有,這是如下:計算R中大矩陣行中指定值的更快速方法

MCct<-matrix(0,500,13) 
for (j in 1:500){ 
for (i in 1:13){ 
MCct[j,i]<-length(which(MC[,j]==i))}} 

我不知道該表的作品,因爲我還需要知道,如果零個事件發生...如果可能,我無法弄清楚如何做到這一點。而且我對應用程序只有一點熟悉,所以也許有一種方法可以使用它......我還沒有成功地弄清楚這個問題。

感謝您的幫助, 費雯麗

回答

4

你可以做到這一點與sapplycolSums(從1到13進行迭代)(加起來的j列):

MCct <- sapply(1:13, function(i) { 
    colSums(MC == i) 
}) 
+4

你也可以用'colSums(MC == i)'替換'apply'函數的調用,我認爲它更快。 – Lamia

+0

@Lamia你100%的權利,良好的捕獲。 –

+0

感謝您的幫助! – Vivien

0

table能計數零次出現次數,您只需創建一個具有整個級別範圍的因子,例如

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

雖然這不像@Patronus的解決方案那麼高效。

+0

感謝您的回答! – Vivien

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)(第n組元件的發生在m的最後一列)。製表的idx

v <- tabulate(idx, nbin = n * ncol(m)) 

v第一n元件總結的次數中的唯一值設定元件1..N出現在m第一列。 v的第二個n元素總結了設置元素1..n出現在第二列m等中的次數。重塑爲期望的矩陣,其中每行表示該組的對應成員。

matrix(v, ncol=ncol(m)) 
+0

感謝您的回答! – Vivien