如何基于R数据框两列组合替换指定列的字符值
解决方案
首先确保数据列是字符类型(避免默认因子类型干扰):
data[] <- lapply(data, as.character)
方法一:Base R 循环处理
定义一个处理单个基因型的函数,判断是否需要翻转顺序:
fix_genotype <- function(x, a1, a2) { chars <- strsplit(x, "")[[1]] if (chars[1] == a2 && chars[2] == a1) { paste(a1, a2, sep = "") } else { x } }
逐行处理所有Ind开头的列:
for (i in seq(nrow(data))) { current_a1 <- data$A1[i] current_a2 <- data$A2[i] data$Ind1[i] <- fix_genotype(data$Ind1[i], current_a1, current_a2) data$Ind2[i] <- fix_genotype(data$Ind2[i], current_a1, current_a2) data$Ind3[i] <- fix_genotype(data$Ind3[i], current_a1, current_a2) }
方法二:dplyr 向量化处理
如果习惯使用tidyverse工具,可以用更简洁的写法:
library(dplyr) library(stringr) data <- data %>% rowwise() %>% mutate(across(starts_with("Ind"), ~ { genotype_chars <- str_split(.x, "")[[1]] if (genotype_chars[1] == A2 && genotype_chars[2] == A1) { str_c(A1, A2) } else { .x } })) %>% ungroup()
运行上述代码后,即可得到符合要求的结果:
> data A1 A2 Ind1 Ind2 Ind3 1 A C AA AC AC 2 T G TG TG GG 3 C T TT CT CT
内容的提问来源于stack exchange,提问作者user2380782
相关产品推荐
相关产品推荐

