2013-04-06 77 views
0

我有兩個矩陣,一個是10x1雙矩陣,可以擴展爲任何用戶預設編號,例如。 100.R:根據另一個矩陣中的值計算矩陣中的百分比值

視圖(min_matrx)

V1 
1 27 
2 46 
3 30 
4 59 
5 46 
6 45 
7 34 
8 31 
9 52 
10 46 

另一矩陣看起來像這樣,也有未示出更多的行:

視圖(main_matrx)

row.names  sum_value 
s17   45 
s7469   213 
s20984  24 
s17309  214 
s7432369  43 
s221320984 12 
s17556  34 
s741269  11 
s20132984  35 

對於每一行名在main_matrx中我想計算一次值,該值超過main_matrx中的sum_value值出現在min_matrx中。然後我想將它除以min_matrx中的行數,並將該值作爲main_matrx中的新列添加。

例如,在s17的main_matrx的第1行中,min_matrx = 5次時值出現的次數大於45。

現在將5乘10行min_matrx => 5/10 = 0.5將是我想要作爲s17的main_matrx中新列的值。然後對行名稱中的所有s_id使用相同的公式。

到目前爲止,我還撥弄着:

for(s in 1:length(main_matrx)) { 
    new<-sum(main_matrx[s,]>min_CPRS_set)/length(min_matrx) 
    } 

,我嘗試使用適用(),但我仍然沒有得到結果。

apply(main_matrx,1:length(main_matrx), function(x) sum(main_matrx>min_CPRS_set)/length(min_matrx))) 

現在,我只是卡住了,因爲它不工作。我還是R新手,所以我的代碼效率不高。有什麼建議麼?

+0

這很難遵循。你對'17','s7469'和'20984'有什麼期望? – 2013-04-06 19:57:30

+0

我編輯了這個問題,使其更清晰。對於第17節,我預計0.5。對於每個s_id,公式應爲=(min_matrx中的#次值小於main_matrx中的sum_value)/ min_matrx中的行數。 – CadisEtRama 2013-04-06 20:16:34

+0

適用於對矩陣的所有列或行進行操作。第二個參數是1或2。 – 2013-04-06 21:01:03

回答

0

很多方法來解決這個問題。這裏有一個出現在我的腦海中(我認爲我明白你在做什麼,再次理解一個例子比單獨使用單詞更容易理解,將來我會提出一個伴隨文本問題的例子。)

其中x是元素,y是矢量

FUN <- function(x, y = min_matrix[, 1]) { 
    sum(y > x)/length(y) 
} 
main_matrx$new <- sapply(main_matrx[, 2], FUN) 

## > main_matrx 
## row.names sum_value new 
## 1  s17  45 0.5 
## 2  s7469  213 0.0 
## 3  s20984  24 1.0 
## 4  s17309  214 0.0 
## 5 s7432369  43 0.6 
## 6 s221320984  12 1.0 
## 7  s17556  34 0.6 
## 8 s741269  11 1.0 
## 9 s20132984  35 0.6