使用r从一列替换为另一列

时间:2018-06-21 23:07:36

标签: r

我是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

谢谢。

1 个答案:

答案 0 :(得分:1)

您需要首先在Sample1上拆分/列。检查拆分值是否为0,然后将该值替换为REF,否则替换ALT列的内容。最后,将这些替换值连接起来以得到最终结果。

Sample2重复相同的过程。

假设-Sample1Sample2将始终只有01

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