我有两个矩阵,一个是10x1双矩阵,可以扩展到任何用户预设数字,例如。 100。
查看(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中的新列。
例如,在s_17的main_matrx的第1行中,min_matrx中出现的值大于45的次数= 5次。
现在将5行除以10行min_matrx => 5/10 = 0.5将是我想在s_17的main_matrx中作为新列的值。然后是行名称中所有s_ids的相同公式。
到目前为止,我已经摆弄:
for(s in 1:length(main_matrx)) {
new<-sum(main_matrx[s,]>min_CPRS_set)/length(min_matrx)
}
我尝试使用apply(),但我仍然没有得到结果。
apply(main_matrx,1:length(main_matrx), function(x) sum(main_matrx>min_CPRS_set)/length(min_matrx)))
现在,我只是被卡住,因为它不起作用。我还是R的新手,所以我的代码效率不高。有什么建议吗?
答案 0 :(得分: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