0

私は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()
4

2 に答える 2

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

あなたの出力

ただし、これがこのタイプのデータを表示するのに役立つ方法であるかどうかはわかりません。あなたの目標が何であるかを再考したいかもしれません。

于 2013-02-13T22:30:06.913 に答える
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 
于 2013-02-14T02:25:42.657 に答える