两个数据帧/矩阵的所有行之间的逐元素向量乘法
Elementwise vector multiplication between all rows of two data frames / matrices
我有一组模型,需要在不同的估计量级别为每个模型生成生存估计值。我首先要创建我将平均的模型。
在这里,模型集由一个矩阵表示,其中列是在特定模型中可能会或可能不会找到的效果,
行是单个模型,单元格值 (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")
我现在需要做的是创建一个输出,它基本上是将每行 estvals 乘以每行 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 生成无条件估计,以在模型平均后建立适当的置信区间。因此,上面的每个估计都会生成各种情况下的生存估计,最终将以图形方式显示。
我们可以使用
n1 <- nrow(modset)
n2 <- nrow(estvals)
outs <- modset[rep(1:n1, times = n2), ] * estvals[rep(1:n2, each = n1), ]
无论您有矩阵还是数据框,这都适用。我用rep
生成的索引也可以通过expand.grid
.
得到
我有一组模型,需要在不同的估计量级别为每个模型生成生存估计值。我首先要创建我将平均的模型。
在这里,模型集由一个矩阵表示,其中列是在特定模型中可能会或可能不会找到的效果, 行是单个模型,单元格值 (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")
我现在需要做的是创建一个输出,它基本上是将每行 estvals 乘以每行 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 生成无条件估计,以在模型平均后建立适当的置信区间。因此,上面的每个估计都会生成各种情况下的生存估计,最终将以图形方式显示。
我们可以使用
n1 <- nrow(modset)
n2 <- nrow(estvals)
outs <- modset[rep(1:n1, times = n2), ] * estvals[rep(1:n2, each = n1), ]
无论您有矩阵还是数据框,这都适用。我用rep
生成的索引也可以通过expand.grid
.