0

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

我读到 R 让我们说一些 txt 文件(每个都有一个特定的名称),它们都以相同的方式构造(数据框),带有“基因”和 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 的每个文件都有不同的文件名(文件名 1、文件名 2、文件名 3、...)。

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

    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 文件名)。输出表的标题是“基因”名称(Gene1,Gene2,Gene3,...)和条件(A1,A2,A3,A4)的串联。

谁能给我一个建议,我该如何解决这个问题?非常感谢提前亲切的问候

4

1 回答 1

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)
于 2013-05-13T13:44:19.387 回答