两个数据帧/矩阵的所有行之间的元素向量乘法

时间:2016-10-19 20:21:48

标签: r matrix dataframe matrix-multiplication

我有一组模型,需要在不同的估算水平上生成每个模型的生存估计值。我首先要创建我将平均的模型。

这里,模型集由矩阵表示,其中列是在特定模型中可能找到或未找到的效果, 行是单独的模型,单元格值(1/0)打开或关闭值。

modset <- structure(list(A = c(1, 1), B = c(1, 1), C = c(1, 1), D = c(1, 
1), E = c(0, 1), F = c(1, 0)), .Names = c("A", "B", "C", "D", 
"E", "F"), row.names = c(2L, 4L), class = "data.frame")

我还创建了一个矩阵,它提供了运行每个模型所需的值。

estvals <- structure(list(int = c(1L, 1L, 1L, 1L), age = c(6L, 18L, 6L, 
18L), species = c(1L, 1L, 0L, 0L), Time = c(12L, 50L, 27L, 12L
), height = c(90L, 90L, 90L, 90L), LastNew = c(7L, 7L, 21L, 21L
)), .Names = c("int", "age", "species", "Time", "height", "LastNew"
), row.names = c(1L, 11L, 16L, 20L), class = "data.frame")

我现在需要做的是创建一个输出,它是每行modset的每一行的乘法。 在上面的示例中,我将获得8行(每个estval记录2条记录):

outs <- structure(list(int = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), age = c(6L, 
6L, 18L, 18L, 6L, 6L, 18L, 18L), species = c(1L, 1L, 1L, 1L, 
0L, 0L, 0L, 0L), Time = c(12L, 12L, 50L, 50L, 27L, 27L, 12L, 
12L), height = c(0L, 90L, 0L, 90L, 0L, 90L, 0L, 90L), LastNew = c(7L, 
0L, 7L, 0L, 21L, 0L, 21L, 0L)), .Names = c("int", "age", "species", 
"Time", "height", "LastNew"), class = "data.frame", row.names = c(NA, 
-8L))

我无法提出解决方案。我已经尝试在apply()或sweep()中设置一些东西,但似乎无法获得一个能满足我要求的功能。

最终,我正在为SE生成无条件估计值,以便在模型平均后建立适当的置信区间。因此,上述每个遗产都会在各种情景下生成最终以图形方式显示的生存估计值。

1 个答案:

答案 0 :(得分:2)

我们可以使用

n1 <- nrow(modset)
n2 <- nrow(estvals)
outs <- modset[rep(1:n1, times = n2), ] * estvals[rep(1:n2, each = n1), ]

无论您有矩阵还是数据框,这都会有效。我使用rep生成的索引也可以通过expand.grid获得。