在R中遍历数据框列,从矩阵提取对应值添加新列
R语言批量从距离矩阵提取值到数据框
我正在使用R语言进行数据清洗与分析,现有数据框df结构如下:
Strain1 Strain2 p1 p2 p2 p3 p3 p4 p4 p5 p5 p1
以及距离矩阵distmat:
p1 p2 p3 p4 p5 p1 0 0.1 0.3 0.4 0.9 p2 0.1 0 0.5 0.1 0.6 p3 0.3 0.5 0 0.8 0.3 p4 0.4 0.1 0.8 0 0.2 p5 0.9 0.6 0.3 0.2 0
需要为df添加一列dist,根据每行的Strain1和Strain2,从distmat中提取对应位置的值填入,需处理超1000条数据,预期结果如下:
Strain1 Strain2 dist p1 p2 0.1 p2 p3 0.5 p3 p4 0.8 p4 p5 0.2 p5 p1 0.9
解决方案
方法1:基础R向量化索引(高效推荐)
利用矩阵的双下标索引特性,直接通过cbind构造行/列索引对,一次性提取所有对应值。这种向量化操作无循环开销,处理1000+条数据速度极快:
df$dist <- distmat[cbind(df$Strain1, df$Strain2)]
方法2:tidyverse风格实现
如果习惯使用dplyr,可以结合rowwise逐行处理(1000条数据完全适用,适合熟悉tidy语法的用户):
library(dplyr) df <- df %>% rowwise() %>% mutate(dist = distmat[Strain1, Strain2]) %>% ungroup()
内容的提问来源于stack exchange,提问作者Taliamycota
相关产品推荐
相关产品推荐

