R - 对矩阵的特定矩阵索引求平均值

时间:2018-04-13 21:33:24

标签: r matrix average

我有两个矩阵。第一个m1是100x100,包含带小数位的数字,另一个是m2,是300x100,并且稀疏地填充了整数,如下所示:

m1 <- matrix(rexp(1000, rate = .1), ncol = 100)
m2 <- matrix(sample(c(rep(0, 1000), rep(1, 10), rep(2, 1)), 300 * 100, replace = T), 300, 100)

m1中的每一行都对应m2中相同数字的列。每列m2表示该观察的m1中相应行的出现次数。

对于m2中的每一行,我希望colMeans的每一行m1对应于m2行中出现的次数。结果应该是300x100矩阵。我想知道最有效的方法。

这是一项复杂的操作,但希望你明白我的意思。如果您需要任何澄清,我可以给予。如果它有所帮助,我试图做的是从单词特征矩阵和文档术语矩阵中获取文档特征矩阵。

1 个答案:

答案 0 :(得分:0)

dtm <- matrix(c(0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0), ncol = 4)
wvm <- matrix(c(27.305102,  9.095906, 3.792833, 17.561222, 32.06434, 4.719152, 8.367996, 0.0568822), ncol = 2)

dtm
wvm

t(apply(dtm, 1, function(dtm_row) {
  vs <- wvm[dtm_row > 0, ] * dtm_row[dtm_row > 0]
  if (is.matrix(vs)) { colMeans(vs) } else vs
}))

解决了我自己的问题。但如果有人想改进我的方法,我会将答案标记为正确答案。