如何基于patch列字符串分组计算sn_sp_dist列的UP与DN差值?
按GL编号分组计算UP与DN对应重复项的sn_sp_dist差值
问题分析
需要针对每个GL编号,将其UP位置各重复项的sn_sp_dist数值,减去对应重复项DN位置的数值。核心是从patch列拆分出GL编号、位置(UP/DN)和重复项序号,再按GL编号+重复项分组计算差值。
解决步骤
- 数据类型转换:原数据中
sn_sp_dist是因子类型,需先转为数值型才能进行计算。 - 拆分patch列:通过下划线分割
patch字段,提取GL编号、位置、重复项序号三个关键信息。 - 分组计算差值:按GL编号和重复项分组,匹配同组内的UP与DN数值,计算差值。
完整代码
library(dplyr) library(tidyr) # 将sn_sp_dist从因子转为数值型 met.ex <- met.ex %>% mutate(sn_sp_dist = as.numeric(as.character(sn_sp_dist))) # 拆分patch列,提取关键信息 met_processed <- met.ex %>% separate(patch, into = c("gl_id", "position", "replicate"), sep = "_") # 分组计算UP - DN的差值 diff_result <- met_processed %>% group_by(gl_id, replicate) %>% summarise( sn_sp_diff = sn_sp_dist[position == "UP"] - sn_sp_dist[position == "DN"], .groups = "drop" # 计算后取消分组 ) # 查看结果 print(diff_result)
结果说明
运行代码后会得到每个GL编号+重复项组合的差值:
- GL134的三个重复项均有UP和DN数据,可正常计算差值;
- GL22的_2重复项仅存在DN数据,_3重复项仅存在UP数据,这两组的差值会显示为
NA; - 若需过滤掉含
NA的结果,可在summarise后添加filter(!is.na(sn_sp_diff))。
内容的提问来源于stack exchange,提问作者Geomicro
相关产品推荐
相关产品推荐

