r - 将 3 列长格式转换为 1000 个上(或下)三角矩阵
问题描述
我想在 R 中转换一千个具有 8 个特征的上(或下)矩阵中的三个定义的列(数据框)。每个矩阵在数据框中逐行写出。这是一个例子:
Dataframe with 3 columns (and 12000 rows). From this I need to have 1000 matrices (triangular):
col1 col2 col3
row1 1 2 3
row2 2 3 4
row3 7 4 5
row4 1 4 5
row5 2 4 5
row6 3 4 5
. . . .
. . . .
. . . .
row12000 1 6 9
我需要将它们转换为 1000 个矩阵(三角形),每个矩阵有 8 个特征,并将它们放在一个列表中:将数据框中的数据转换为第一个矩阵的示例:
trait 1 trait2 trait3 trait4 trait5 trait6 trait7 trait8
trait1: 1(row1 col1)
trait2: 2(row1 col2) 5(row3 col3)
trait3: 3(row1 col3) 1(row4 col1) 3(row6 col1)
trait4: 2(row2 col1) 4(row4 col2) 4(row6 col2) value
trait5: 3(row2 col3) 5(row4 col3) 5(row6 col3) value value
trait6: 4(row2 col3) 2(row5 col1) . value value value
trait7: 7(row3 col1) 4(row5 col2) . value value value value
trait8: 4(row3 col2) 5(row5 col3) . value value value value value
解决方案
- 将矩阵值逐行折叠
df
为向量 (all_values
) 中的数据帧 ( ) 值。 - 创建 36 个值的组并将它们拆分为列表。
- 将 36 个值中的每一个放入 8 X 8 的下三角矩阵中,并获取矩阵列表。
all_values <- c(t(df))
dummmy_matrix <- matrix(nrow = 8, ncol = 8,
dimnames = list(paste0('trait', 1:8), paste0('trait', 1:8)))
matrix_list <- lapply(split(all_values, ceiling(seq_along(all_values)/36)), function(x) {
dummmy_matrix[lower.tri(dummmy_matrix, diag = TRUE)] <- x
dummmy_matrix
})
matrix_list
推荐阅读
- javascript - 如何使用 JS、Chart.js 和 PHP 计算最佳拟合的非线性线(回归线)?
- ios - 命令 PhaseScriptExecution 失败,退出代码为非零(反应本机 0.64.0,xcode 12.4)
- c++ - 如何根据值比较启用模板?
- javascript - 组件数组过滤器问题
- javascript - fetch() 仅在浏览器中设置 4 个 cookie 中的 1 个
- python - 如何在 Keras 中使用文件夹中的图像作为目标?
- javascript - 使用 Jayq 将 Resize 事件绑定到 Clojurescript
- javascript - 如何遍历对象键的值,如果匹配,则将其与另一个值进行比较,而不是将其更改为另一个值
- azureservicebus - Masstransit:即使消费者成功响应,请求客户端也总是收到超时
- scala - 如何从 trait 中定义的泛型类型参数编码数据集类型——scala.ScalaReflectionException:类型 K 不是类