r - 如何用r中的条件替换文本元素

标签 r

我想通过将“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/

相关文章:

c++ - 在RcppParallel中访问begin和end(示例计算 vector 的均值)

r - ggplot2 函数 - 检查用户输入变量是否应该是映射的美学

r - 使用gg_animate创建gif

r - 编织者忽略了fig.pos?

r - 如何阅读 .xpt 文件?

r - 在变异中使用 case_when 时是否需要数据框名称?

r - 将列表列表强制到数据帧,但在列表列中保留*一些*元素

r - 为什么使用 as.factor() 而不仅仅是 factor()

r - 在进行卡方检验时修复 for 循环中的列

在 R 中将数据文件渲染为格式化的 Word 文档