我想通过将“X”或“Y”列中的文本相应地替换为“x”或“y”,但忽略“-”来替换由“/”分隔的元素。
df <- data.frame("X"=c("A","AB","CD","E","T"),
"Y"=c("AT","A","CDCD","F","A"),
"R1"=c("A/A","AB/AB","CD/CD","E/E","-/-"),
"R2"=c("A/AT","AB/AB","CD/CDCD","F/F","T/T"),
"R3"=c("AT/AT","A/AB","CDCD/CDCD","E/F","A/T"),
"R4"=c("AT/A","A/A","-/-","F/E","T/A"),
"R5"=c("-/-","A/AB","CDCD/CD","F/F","A/A"),
"R6"=c("A/A","-/-","CD/CD","E/E","-/-"))
预期结果是:
X Y R1 R2 R3 R4 R5 R6
A AT x/x x/y y/y y/x -/- x/x
AB A x/x x/x y/x y/y y/x -/-
CD CDCD x/x x/y y/y -/- y/x x/x
E F x/x y/y x/y y/x y/y x/x
T A -/- x/x y/x x/y y/y -/-
我不知道如何以有效的方式做到这一点。我很感激任何帮助。
最佳答案
非常棘手的问题!这是一种解决方案:
df[,3:ncol(df)] <- t(apply(df,1,function(R) sapply(strsplit(R[3:ncol(df)],'/'),function(S) paste0(gsub(paste0('^',R[1],'$'),'x',gsub(paste0('^',R[2],'$'),'y',S)),collapse='/'))));
df;
## X Y R1 R2 R3 R4 R5 R6
## 1 A AT x/x x/y y/y y/x -/- x/x
## 2 AB A x/x x/x y/x y/y y/x -/-
## 3 CD CDCD x/x x/y y/y -/- y/x x/x
## 4 E F x/x y/y x/y y/x y/y x/x
## 5 T A -/- x/x y/x x/y y/y -/-
关于r - 如何用r中的条件替换文本元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30358776/