我是R
的新手,但是要处理的文件很大。
我在R
中有一个看起来像这样的表:
CHROM POS ID REF ALT Sample1 Sample2
20 1 rs1000000 G A 1/1 0/0
20 2 rs1000002 A G 1/1 0/1
20 3 rs1000004 A G 0/0 0/0
我想查看第6列Sample1
,并用第4列REF
相应行中的字母替换“ 0”。我想删除斜线,并通过用第5列Sample1
中的字母替换第6列ALT
中的斜线来重复。我想对表中的每一行执行此操作。这是预期的结果:
CHROM POS ID REF ALT Sample1 Sample2
20 1 rs1000000 G A AA GG
20 2 rs1000002 A G GG AG
20 3 rs1000004 A G AA AA
谢谢。
答案 0 :(得分:1)
您需要首先在Sample1
上拆分/
列。检查拆分值是否为0
,然后将该值替换为REF
,否则替换ALT
列的内容。最后,将这些替换值连接起来以得到最终结果。
对Sample2
重复相同的过程。
(假设-Sample1
和Sample2
将始终只有0
或1
)
library(dplyr)
df %>%
rowwise() %>%
mutate(Sample1 = paste(ifelse(strsplit(Sample1, split = '/')[[1]] == 0, REF, ALT), collapse = ""),
Sample2 = paste(ifelse(strsplit(Sample2, split = '/')[[1]] == 0, REF, ALT), collapse = ""))
给出
> df1
CHROM POS ID REF ALT Sample1 Sample2
1 20 1 rs1000000 G A AA GG
2 20 2 rs1000002 A G GG AG
3 20 3 rs1000004 A G AA AA
示例数据
df <- structure(list(CHROM = c(20L, 20L, 20L), POS = 1:3, ID = c("rs1000000",
"rs1000002", "rs1000004"), REF = c("G", "A", "A"), ALT = c("A",
"G", "G"), Sample1 = c("1/1", "1/1", "0/0"), Sample2 = c("0/0",
"0/1", "0/0")), .Names = c("CHROM", "POS", "ID", "REF", "ALT",
"Sample1", "Sample2"), class = "data.frame", row.names = c(NA,
-3L))
# CHROM POS ID REF ALT Sample1 Sample2
#1 20 1 rs1000000 G A 1/1 0/0
#2 20 2 rs1000002 A G 1/1 0/1
#3 20 3 rs1000004 A G 0/0 0/0