重新组织R中的数据将行添加到列

时间:2013-05-13 13:27:18

标签: r data-structures reshape

我正面临数据的结构重组,但不幸的是我被卡住了。

我读到R让我们说一些txt文件(每个都有一个特定的名称),所有这些文件以“Gene”和4条件“A1”,“A2”的相同方式结构化(数据框) ,“A3”和“A4”及其各自的值:

Gene A1 A2 A3 A4  
Gene1 value1.1 value1.2 value1.3 value1.4
Gene2 value2.1 value2.2 value2.3 value2.4
Gene3 value3.1 value3.2 value3.3 value3.4
...

但是每个读入R的文件都有不同的文件名(filename1,filename2,filename3,...)。

我想将所有这些文件中的数据重组为一个具有以下结构的单个数据文件:

    id Gene1_A1 Gene1_A2 Gene1_A3 Gene1_A4 Gene2_A1 Gene2_A2 Gene2_A3 Gene2_A4 Gene3_A1 Gene3_A2 Gene3_A3 Gene3_A4 ...
   filename1 value1.1 value1.2 value1.3 value1.4 value2.1 value2.2 value2.3 value2.4 value3.1 value3.2 value3.3 value3.4
    filename2
    filename3
    ...

简而言之,来自Gene2的数据应该在Gene1,Gene3等数据结束后跟进。 然后每行表示一个id(表示每个txt文件名)。 输出表的标题是“Gene”-name(Gene1,Gene2,Gene3,...)和条件(A1,A2,A3,A4)的串联。

有人能告诉我如何解决这个问题吗? 提前谢谢了 亲切的问候 小号

1 个答案:

答案 0 :(得分:0)

sample.table.text <- "Gene A1 A2 A3 A4  
Gene1 value1.1 value1.2 value1.3 value1.4
Gene2 value2.1 value2.2 value2.3 value2.4
Gene3 value3.1 value3.2 value3.3 value3.4"

# create some sample files
files <- replicate(2, tempfile())
for (f in files) write(sample.table.text, f)

# read and reshape
dat <- lapply(files, function(fname) {
    x <- read.table(fname, header=TRUE)
    x['id'] <- basename(fname)
    reshape(x, idvar='id', timevar='Gene', direction='wide')
})
# collapse into one data.frame
result <- do.call(rbind, dat)
result
#                id A1.Gene1 A2.Gene1 A3.Gene1 A4.Gene1 A1.Gene2 A2.Gene2 A3.Gene2 A4.Gene2 A1.Gene3 A2.Gene3 A3.Gene3 A4.Gene3
# 1 file848632b4675 value1.1 value1.2 value1.3 value1.4 value2.1 value2.2 value2.3 value2.4 value3.1 value3.2 value3.3 value3.4
# 2 file84864ad4a6c value1.1 value1.2 value1.3 value1.4 value2.1 value2.2 value2.3 value2.4 value3.1 value3.2 value3.3 value3.4

# remove temp files
for (f in files) unlink(f)