2013-05-13 66 views
0

我正面临数据的结构重组,但不幸的是我被卡住了。我读入R让我们说一些txt文件(每个文件都有一个特定的名称),它们都以与“基因”相同的方式构建(数据框),4个条件为“A1”,“ A2, “A3” 和 “A4” 和它们各自的值:在R中重组数据。将行附加到列

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

任何人都可以给我一个建议我怎么能解决这个问题? 提前 非常感谢亲切的问候 小号

回答

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) 
+0

嘿,非常感谢,我didn't知道这个功能。这绝对是做我所需要的。我正在尝试通过重塑函数来理解它到底在做什么。我也在问自己,如果不是合并A1.Gene1等,也可以合并Gene1.A1等。 – 2013-05-15 08:11:23

+0

@SlatterSlagger太好了,别忘了接受答案。 – 2013-05-15 12:05:35

+0

在这种情况下,重塑会创建A1.Gene1,A2.Gene1等,是不是可以更改获取Gene1.A1,Gene1.A2的顺序? – 2013-05-29 14:35:51