我是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()
答案 0 :(得分:3)
您正在寻找的是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()
不确定这是否是提供此类数据的有用方法。你可能想重新考虑一下你的目标是什么。
答案 1 :(得分: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