在基础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
相关产品推荐
相关产品推荐

