在R中操纵基因型文件

时间:2013-11-06 19:49:36

标签: r regex bioinformatics

我有一个csv文件,其中包含几个二倍体个体的遗传信息。它看起来像以下测试文件:

 Sample  L1 L1.1  L2 L2.1
      1 100  100 200  220
      2 100  100 220  220
      3 110  100 220  220
      4 100  110 220  220
      5 110  110 220  220

我需要组合信息,以便数据框如下所示:

 Sample L1  L2 
      1 100 200
      1 100 220
      2 100 220
      2 100 220
      3 110 220
      3 100 220
      4 100 220
      4 110 220
      5 110 220
      5 110 220

有没有人知道为大型数据集执行此操作的好方法?

非常感谢。

2 个答案:

答案 0 :(得分:3)

试试这个:

#dummy data
df <- read.table(text="
Sample  L1 L1.1  L2 L2.1
1 100  100 200  220
2 100  100 220  220
3 110  100 220  220
4 100  110 220  220
5 110  110 220  220
",header=T)

#transform
df1 <- data.frame(Sample=rep(df$Sample,2),
                  L1=c(df$L1,df$L1.1),
                  L2=c(df$L2,df$L2.1))
#order by Sample
df1[order(df1$Sample),]

答案 1 :(得分:2)

这是一种方法

> df <- read.table(text="Sample  L1 L1.1  L2 L2.1
        1 100  100 200  220
        2 100  100 220  220
        3 110  100 220  220
        4 100  110 220  220
        5 110  110 220  220
  ", header=T)  # this is your data.frame

> names(df)[-1] <- gsub("\\.[[:digit:]]", "", names(df)[-1]) # cleaning up the colnames
> new_df <- reshape(df, idvar = "Sample", times = names(df)[-1],
                   varying = list(2:5), direction = "long")
> 
> data.frame(Sample=rep(df$Sample, each=length(unique(new_df$time))),
                       do.call(cbind, split(new_df$L, new_df$time)))
   Sample  L1  L2
1       1 100 200
2       1 100 220
3       2 110 220
4       2 100 220
5       3 110 220
6       3 100 200
7       4 100 220
8       4 110 220
9       5 100 220
10      5 110 220