在r中拆分数据帧,然后翻转不同的地方



我有一个数据框架:

rs1065852 rs201377835 rs28371706 rs5030655 rs5030865 rs3892097 rs35742686 rs5030656 rs5030867 rs28371725 rs59421388
A/del     C/del       G/del      A/del     C/del     T/del     T/del    CTT/del     T/del      C/del      C/del

我已经在"/":

上将其拆分
rs1065852 rs201377835 rs28371706 rs5030655 rs5030865 rs3892097 rs35742686 rs5030656 rs5030867 rs28371725 rs59421388
         A           C          G         A         C         T          T       CTT         T          C          C
       del         del        del       del       del       del        del       del       del        del        del 

我想在值不相等的地方翻转(我需要将它们与特定的值模式匹配)。

例如,如果我得到a/g,我希望像我一样将其拆分为g

如果我正确理解了这个问题,则

#sample data (disclaimer - I have added two more columns at the end!)
df <- read.table(text="rs1065852 rs201377835 rs28371706 rs5030655 rs5030865 rs3892097 rs35742686 rs5030656 rs5030867 rs28371725 rs59421388 rs87654321 rs12345678
A/del     C/del       G/del      A/del     C/del     T/del     T/del    CTT/del     T/del      C/del      C/del      A/G      G/A", header=T)
#step to make A/G & G/A same 
df1 <- as.data.frame(t(apply(df, 2, function(x) paste(sort(unlist(strsplit(x, "/"))), collapse = "/"))))    
#similarity matrix to identify which all columns are same
m <- sapply(df1, function(x) sapply(df1, function(y) sum(as.character(x)==as.character(y))))
m

输出是:

            rs1065852 rs201377835 rs28371706 rs5030655 rs5030865 rs3892097 rs35742686 rs5030656 rs5030867
rs1065852           1           0          0         1         0         0          0         0         0
rs201377835         0           1          0         0         1         0          0         0         0
rs28371706          0           0          1         0         0         0          0         0         0
rs5030655           1           0          0         1         0         0          0         0         0
rs5030865           0           1          0         0         1         0          0         0         0
rs3892097           0           0          0         0         0         1          1         0         1
rs35742686          0           0          0         0         0         1          1         0         1
rs5030656           0           0          0         0         0         0          0         1         0
rs5030867           0           0          0         0         0         1          1         0         1
rs28371725          0           1          0         0         1         0          0         0         0
rs59421388          0           1          0         0         1         0          0         0         0
rs87654321          0           0          0         0         0         0          0         0         0
rs12345678          0           0          0         0         0         0          0         0         0
            rs28371725 rs59421388 rs87654321 rs12345678
rs1065852            0          0          0          0
rs201377835          1          1          0          0
rs28371706           0          0          0          0
rs5030655            0          0          0          0
rs5030865            1          1          0          0
rs3892097            0          0          0          0
rs35742686           0          0          0          0
rs5030656            0          0          0          0
rs5030867            0          0          0          0
rs28371725           1          1          0          0
rs59421388           1          1          0          0
rs87654321           0          0          1          1
rs12345678           0          0          1          1

相关内容

最新更新