我的数据框看起来像:
df <- read.table(text="chr pos Ref Alt D045313 D045314 D045135 D045136 D045137 D045138
Chr1 1462191 T C 1/1 0/1 1/1 0/0 1/1 1/1
Chr1 1463534 G C 0/0 1/1 0/0 0/1 0/0 0/0
Chr1 1463881 T A 0/1 0/0 1/1 0/0 1/1 1/1
Chr1 1464091 G A 0/0 0/0 1/1 0/0 1/1 1/1
Chr1 1464651 T C 1/1 0/0 1/1 0/1 1/1 1/1",head=F, stringsAsFactors=F)
Run Code Online (Sandbox Code Playgroud)
预期结果:
chr pos Ref Alt D045313 D045314 D045135 D045136 D045137 D045138
Chr1 1462191 T C C/C T/C C/C T/T C/C C/C
Chr1 1463534 G C G/G C/C G/G G/C G/G G/G
Chr1 1463881 T A T/A T/T A/A T/T A/A A/A
Chr1 1464091 G A G/G G/G A/A G/G A/A A/A
Chr1 1464651 T C C/C T/T C/C T/C C/C C/C
Run Code Online (Sandbox Code Playgroud)
替换将遵循以下:在df [5:10]中,"0"应由df $ Ref中的字符替换,"1"由df $ Alt中的字符替换.我在这个链接中检查了问题[ 在R中的数据框中替换变量中的特定字符,但它对我的情况不起作用.感谢任何帮助.
创建数据:
df <- read.table(text="chr pos Ref Alt D045313 D045314 D045135 D045136 D045137 D045138
Chr1 1462191 T C 1/1 0/1 1/1 0/0 1/1 1/1
Chr1 1463534 G C 0/0 1/1 0/0 0/1 0/0 0/0
Chr1 1463881 T A 0/1 0/0 1/1 0/0 1/1 1/1
Chr1 1464091 G A 0/0 0/0 1/1 0/0 1/1 1/1
Chr1 1464651 T C 1/1 0/0 1/1 0/1 1/1 1/1",head=T, stringsAsFactors=F)
Run Code Online (Sandbox Code Playgroud)
使用gsub:
vgsub<- Vectorize(gsub, SIMPLIFY = FALSE)
new <- vgsub("0", df$Ref, as.data.frame(t(df[5:10])))
new <- vgsub("1", df$Alt, new)
df[5:10] <- do.call("rbind", new)
df
chr pos Ref Alt D045313 D045314 D045135 D045136 D045137 D045138
1 Chr1 1462191 T C C/C T/C C/C T/T C/C C/C
2 Chr1 1463534 G C G/G C/C G/G G/C G/G G/G
3 Chr1 1463881 T A T/A T/T A/A T/T A/A A/A
4 Chr1 1464091 G A G/G G/G A/A G/G A/A A/A
5 Chr1 1464651 T C C/C T/T C/C T/C C/C C/C
Run Code Online (Sandbox Code Playgroud)