【问题标题】:R:Calculating percentage values across a matrix based on the values in another matrixR:根据另一个矩阵中的值计算整个矩阵的百分比值
【发布时间】:2013-04-06 19:49:29
【问题描述】:

我有两个矩阵,一个是 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 中。

例如s17的main_matrx的第1行,min_matrx中出现超过45的值的次数=5次。

现在将 min_matrx=> 5/10 =0.5 的 5 除以 10 行将是我希望作为 s17 的 main_matrx 中的新列的值。然后对行名称中的所有 s_id 使用相同的公式。

到目前为止,我一直在摆弄:​​

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 新手,所以我的代码不是特别有效。有什么建议吗?

【问题讨论】:

  • 这很难理解。您对s17s746920984 有何期待?
  • 我编辑了问题以使其更清晰。对于 s17,我预计为 0.5。对于每个 s_id,公式应为 =(min_matrx 中的#times 值小于 main_matrx 中的 sum_value)/min_matrx 中的行数。
  • apply 是对矩阵的所有列或行进行操作。第二个参数是 1 或 2。

标签: r matrix


【解决方案1】:

有很多方法可以解决这个问题。这是我想到的一个(我想我明白你在追求什么;再一次,理解一个例子比单独使用单词要容易得多。将来我会建议一个例子来配合文本问题。)

其中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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 2020-05-19
    相关资源
    最近更新 更多