如何用R语言匹配起始/目标机器名并向空矩阵填充incremental id
R语言实现机器映射矩阵填充
方法一:基础R实现
先创建示例数据(可替换为你的真实数据):
# 构造包含机器映射关系的表格 machine_table <- data.frame( starting_machine = c("MachineA", "MachineB", "MachineA", "MachineC"), target_machine = c("MachineX", "MachineY", "MachineY", "MachineX"), incremental_id = c(1, 2, 3, 4), stringsAsFactors = FALSE ) # 初始化空矩阵:行是所有唯一起始机器,列是所有唯一目标机器 unique_start_machines <- unique(machine_table$starting_machine) unique_target_machines <- unique(machine_table$target_machine) machine_matrix <- matrix( NA, nrow = length(unique_start_machines), ncol = length(unique_target_machines), dimnames = list(unique_start_machines, unique_target_machines) )
通过索引匹配填充矩阵:
# 匹配起始机器对应的矩阵行索引、目标机器对应的矩阵列索引 row_indices <- match(machine_table$starting_machine, rownames(machine_matrix)) col_indices <- match(machine_table$target_machine, colnames(machine_matrix)) # 填充对应位置的增量ID machine_matrix[cbind(row_indices, col_indices)] <- machine_table$incremental_id
查看结果:
print(machine_matrix) # MachineX MachineY # MachineA 1 3 # MachineB NA 2 # MachineC 4 NA
方法二:tidyverse工具包实现(更简洁)
若习惯用tidyverse生态,可通过pivot_wider快速转换格式,再按需转成矩阵:
library(tidyverse) # 转换为宽表格式 machine_wide <- machine_table %>% pivot_wider( names_from = target_machine, values_from = incremental_id # 若存在重复的(starting, target)组合,可通过values_fn指定处理逻辑,例如取最后一个值: # values_fn = list(incremental_id = last) ) # 转换为矩阵(可选,若需要矩阵格式) machine_matrix_tidy <- machine_wide %>% column_to_rownames("starting_machine") %>% as.matrix()
内容的提问来源于stack exchange,提问作者Stambecco999
相关产品推荐
相关产品推荐

