如何在R中用DataFrame值替换二进制矩阵中的对应1值?
在R中替换二进制矩阵的1为对应列的映射值
首先构造你提供的示例数据:
# 二进制矩阵DataFrame binary_df <- data.frame( Plot = 1:3, A = c(1, 1, 1), B = c(0, 0, 1), C = c(0, 1, 0) ) # 列映射数值表,转成命名向量方便后续操作 value_map <- data.frame(Col = c("A", "B", "C"), Value = c(5, 4, 2)) value_vec <- setNames(value_map$Value, value_map$Col)
方法一:使用tidyverse工具(dplyr)
如果你习惯tidyverse生态,用mutate(across())可以简洁完成替换:
library(dplyr) result_df <- binary_df %>% mutate(across(A:C, ~ ifelse(.x == 1, value_vec[cur_column()], .x)))
方法二:基础R实现(无需额外包)
利用向量名字匹配和元素级乘法,效率更高:
# 提取数值列(排除Plot列) num_columns <- binary_df[, -1] # 二进制列与对应映射值相乘(0乘任何数仍为0,1乘映射值得到目标值) num_columns <- num_columns * value_vec[colnames(num_columns)] # 合并Plot列和处理后的数值列 result_df <- cbind(binary_df[, "Plot", drop = FALSE], num_columns)
运行后result_df即为你想要的结果:
Plot A B C 1 1 5 0 0 2 2 5 0 2 3 3 5 4 0
内容的提问来源于stack exchange,提问作者hmich77
相关产品推荐
相关产品推荐

