2013-04-06 96 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