我有两个矩阵。第一个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矩阵。我想知道最有效的方法。
这是一项复杂的操作,但希望你明白我的意思。如果您需要任何澄清,我可以给予。如果它有所帮助,我试图做的是从单词特征矩阵和文档术语矩阵中获取文档特征矩阵。
答案 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
}))
解决了我自己的问题。但如果有人想改进我的方法,我会将答案标记为正确答案。