繁体   English   中英

将data.frame转换为表达式数据的矩阵

[英]Converting data.frame into a matrix for expression data

我是R的新手,但是我越来越危险。 我想根据药物治疗后监测的大约2000个基因制作大量的基因表达折线图。 通过csv加载后的数据框如下所示

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()

您正在寻找的是reshape2库中的melt()函数。 我使用了您的变量名,但是我建议将融化的数据存储到另一个变量名中。

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()    

您的输出

虽然不确定这是否是呈现此类数据的有用方法。 您可能需要重新考虑您的目标是什么。

您实际上所做的是“堆叠”变量,因此您也可以使用... 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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM