You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 07:55:27