在R语言中根据行名和列名提取矩阵对应单元格值
从矩阵中按行名列名匹配提取值到数据框
下面提供几种高效的实现方法,先模拟测试数据方便你验证:
模拟测试数据
# 生成带行名、列名的100行10列矩阵M1 set.seed(123) M1 <- matrix(rnorm(1000), nrow = 100, ncol = 10, dimnames = list(paste0("row", 1:100), paste0("col", 1:10))) # 生成包含行名、列名的数据框DF DF <- data.frame( C1 = sample(paste0("row", 1:100), 10, replace = FALSE), C2 = sample(paste0("col", 1:10), 10, replace = TRUE) )
方法一:基础R高效实现
直接利用矩阵的索引特性,将数据框的行名、列名列转换为索引矩阵来提取值:
DF$C3 <- M1[as.matrix(DF[, c("C1", "C2")])]
这种方法不需要逐行循环,效率远高于逐行处理,适合大矩阵场景。
方法二:基础R逐行处理(适用于理解逻辑)
如果需要明确看到逐行匹配的过程,可以用apply函数:
DF$C3 <- apply(DF, 1, function(x) M1[x["C1"], x["C2"]])
方法三:tidyverse/dplyr实现
如果你习惯使用tidyverse生态,可以用rowwise实现逐行匹配:
library(dplyr) DF <- DF %>% rowwise() %>% mutate(C3 = M1[C1, C2]) %>% ungroup()
内容的提问来源于stack exchange,提问作者vp_050
相关产品推荐
相关产品推荐

