2013-02-13 38 views
0

我是R的新手,但我越来越危险。我想从药物治疗后监测的大约2000个基因中制作一个大量的基因表达折线图。通过CSV样之后,我的数据框看起来像这样
将data.frame转换为表达式数据的矩阵

head(tmp) 
    gene_symbol untreated X1hr.avg X3hr.avg X6hr.avg X24hr.avg 
1  ERRFI1 0.16612478 -2.0758630 -2.5892085 -2.02039809 -2.4124696 
2  ERRFI1 0.27750147 -2.3086333 -3.0538376 -4.01436186 -4.7491462 
3  CTDSPL2 0.13172411 -0.7920983 -0.3580963 -0.76213664 -0.8171385 
4  CTDSPL2 -0.05205203 -0.9551288 -0.2072265 -0.76993891 -1.0028680 
5  SLC26A2 0.20268100 0.5188266 0.5429924 0.01970562 -1.1955852 
6  SLC29A4 0.19658238 -0.8102461 -0.9019243 -1.50714838 -1.4648872 

我想这个数据帧转换为这样的事情:

gene_symbol ratio  treatment 
ERRFI1  0.16612478 untreated 
ERRFI1  -2.0758630 X1hr.avg 
ERRFI1  -2.5892085 X3hr.avg 
ERRFI1  -2.02039809 X6hr.avg 
ERRFI1  -2.4124696 X24hr.avg 

等等

这将让我通过ggplot绘图:

ggplot(data=tmp, aes(x=factor(treatment), y=ratio, group=gene_symbol)) + geom_line() + geom_point() 

回答

3

你在找什么是熔化()函数来自reshape2库。我使用了你的变量名,但我建议将熔化的数据存储到另一个变量名中。

tmp <- as.data.frame(read.table(text="gene_symbol untreated X1hr.avg X3hr.avg X6hr.avg X24hr.avg 
          1  ERRFI1 0.16612478 -2.0758630 -2.5892085 -2.02039809 -2.4124696 
          2  ERRFI1 0.27750147 -2.3086333 -3.0538376 -4.01436186 -4.7491462 
          3  CTDSPL2 0.13172411 -0.7920983 -0.3580963 -0.76213664 -0.8171385 
          4  CTDSPL2 -0.05205203 -0.9551288 -0.2072265 -0.76993891 -1.0028680 
          5  SLC26A2 0.20268100 0.5188266 0.5429924 0.01970562 -1.1955852 
          6  SLC29A4 0.19658238 -0.8102461 -0.9019243 -1.50714838 -1.4648872", header=TRUE)) 

library(reshape2) 

tmp <- melt(data=tmp, id.vars=c("gene_symbol")) 
names(tmp) <- sub("variable", "treatment", names(tmp)) 
names(tmp) <- sub("value", "ratio", names(tmp)) 

ggplot(data=tmp, aes(x=factor(treatment), y=ratio, group=gene_symbol)) + geom_line(aes(colour=gene_symbol)) + geom_point()  

your output

不知道这是否是虽然目前这种类型的数据的有效途径。你可能想重新思考你的目标是什么。

+0

这一工程!你对正在讨论的图表的价值是正确的。我很想知道所有事情的表现如何,但分配情节似乎并未捕捉到。谢谢! – sbeausol 2013-02-14 14:01:49

1

你真正在做的是“叠加”你的变量,所以你也可以使用... stack函数。

out <- data.frame(tmp[1], stack(tmp[-1])) 

您会收到警告,但这是警告,而不是错误。它只是告诉你输出有新的行名。

这里是由此产生的“堆积” data.frame第一个和最后几行:

> head(out) 
    gene_symbol  values  ind 
1  ERRFI1 0.16612478 untreated 
2  ERRFI1 0.27750147 untreated 
3  CTDSPL2 0.13172411 untreated 
4  CTDSPL2 -0.05205203 untreated 
5  SLC26A2 0.20268100 untreated 
6  SLC29A4 0.19658238 untreated 
> tail(out) 
    gene_symbol  values  ind 
25  ERRFI1 -2.4124696 X24hr.avg 
26  ERRFI1 -4.7491462 X24hr.avg 
27  CTDSPL2 -0.8171385 X24hr.avg 
28  CTDSPL2 -1.0028680 X24hr.avg 
29  SLC26A2 -1.1955852 X24hr.avg 
30  SLC29A4 -1.4648872 X24hr.avg