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

在基础R语言中实现向量与矩阵的匹配合并

问题描述

现有如下数据:
矩阵M的结构:

[,1]
[1,]    1
[2,]    0
[3,]    2
[4,]    3
[5,]    0
[6,]    4
[7,]    5
[8,]    0

向量out的结构:

1          2          3          4          5 
0.03674056 0.04589834 0.11752682 0.15196921 0.15641792

需要将out与M的第一列进行匹配合并,得到与M尺寸一致的结果,期望输出:

[,1]     [, 2]
[1,]    1    0.03674056
[2,]    0    0
[3,]    2    0.04589834
[4,]    3    0.11752682
[5,]    0    0
[6,]    4    0.15196921
[7,]    5    0.15641792
[8,]    0    0

数据定义:

M = structure(c(1, 0, 2, 3, 0, 4, 5, 0), dim = c(8L, 1L))
out = c(`1` = 0.0367405608512068, `2` = 0.0458983425258914, `3` = 0.117526821260374, 
`4` = 0.151969207752795, `5` = 0.156417915745223)

请问如何在基础R语言中实现这一操作?

基础R实现方法

可以通过名称匹配+缺失值替换的方式快速实现,以下是两种简洁的写法:

写法一:结合ifelse直接赋值

# 提取M的第一列
m_col <- M[, 1]
# 匹配out的名称,0值直接设为0
matched_vec <- ifelse(m_col == 0, 0, out[as.character(m_col)])
# 合并为目标矩阵
result <- cbind(M, matched_vec)

写法二:先索引再替换NA

# 利用字符索引匹配out,不存在的名称会返回NA
matched_vec <- out[as.character(M[, 1])]
# 将NA替换为0
matched_vec[is.na(matched_vec)] <- 0
# 合并矩阵
result <- cbind(M, matched_vec)

运行任意一种写法后,result就是期望的输出矩阵。两种方法逻辑一致,都是利用out的元素名称("1"-"5")与M第一列的值匹配,未匹配到的位置(即M中的0)设为0,最后通过cbind合并到原矩阵。

内容的提问来源于stack exchange,提问作者user113156

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:10:17