如何筛选与nr种群个体距离≤0.01的fr2100个体
筛选符合坐标范围的PCA个体
核心思路
要完成这个筛选,关键是验证fr2100中的每个个体,是否存在至少一个nr个体的Dim.1和Dim.2坐标,同时落在该个体对应坐标的±0.01区间内。针对大样本量,优先选择效率更高的向量化或批量匹配方式。
具体代码实现
假设ind是包含两个种群的列表,每个种群为带个体标识、Dim.1、Dim.2列的数据框:
步骤1:拆分数据集
# 提取两个种群的单独数据框 fr_data <- ind$fr2100 nr_data <- ind$nr
步骤2:两种筛选方案
方案1:基础R原生实现
# 遍历每个fr个体,检查是否存在符合条件的nr个体 match_result <- apply(fr_data[, c("Dim.1", "Dim.2")], 1, function(fr_coord) { any( abs(nr_data$Dim.1 - fr_coord[1]) <= 0.01 & abs(nr_data$Dim.2 - fr_coord[2]) <= 0.01 ) }) # 提取符合条件的fr2100个体 selected_fr <- fr_data[match_result, ]
方案2:dplyr+tidyr语法(更易读)
library(dplyr) library(tidyr) # 交叉连接两个数据集,筛选后去重得到目标个体 selected_fr <- fr_data %>% crossing(nr_data) %>% filter(abs(Dim.1.x - Dim.1.y) <= 0.01, abs(Dim.2.x - Dim.2.y) <= 0.01) %>% distinct(across(all_of(colnames(fr_data))))
注意事项
- 由于两个种群样本量较大(总匹配次数约3300万),基础R的
apply方法可能稍慢,dplyr的交叉连接在现代R版本中优化较好,也可改用data.table进一步提升处理速度。 - 提前确认
Dim.1和Dim.2为数值类型,避免因数据类型错误导致匹配失效。
内容的提问来源于stack exchange,提问作者Tristan
相关产品推荐
相关产品推荐

