2016-10-24 6 views
1

私はRを初めて使い、人生を楽にしようとしています。サイズが異なるいくつかの列を持つデータフレームがあります。主にそれは「遺伝子」列であり、残りは異なる患者/条件のための発現数値データである。私は、1)各数値列でソートし、2) '遺伝子'列と各数値列のみを含むファイルを作成します。私はこれのためのforループを生成しようとしています。データベースとして構築されたmtcarsを例として、次のコードを生成しました:データフレームからテキストファイルをソートして作成する

mtcars 

for (i in 2:ncol(mtcars)) { 
    twocolumns <- data.frame(mtcars[,c(1,i)]) 
    write.csv(twocolumns, paste0(i,'.txt'), row.names = F) 
} 

これは1,2,3,4 ... '.txt'という名前のファイルを作成します。これらを作成して列と同じ名前にするにはどうすればよいですか?

また、私はソートの部分を理解していません。これまでのところ、私はこの

mtcars <- mtcars[order(i),] 

試みた(右の「twocolumns」行の前にしたが、これは1行、2列のファイルが作成されます。)

を任意の助けが理解されるであろう!

答えて

1

名前の問題については、iをcolnames(twocolumns [2])に置き換えてください。 rownamesは気にしないので、各データフレームのcol1とcol2でソートするためにdplyr :: arrangeを使いました。ベースRで

mtcars 
require(dplyr) 
for (i in 2:ncol(mtcars)) { 
    twocolumns <- data.frame(mtcars[,c(1,i)]) 
    twocolumns<-arrange(twocolumns,twocolumns[,1],twocolumns[,2]) 
    write.csv(twocolumns, paste0(colnames(twocolumns[2]),'.txt'), row.names = F) 
} 
+0

ありがとうございます。実際には、私はcolumn2で並べ替えたいので、[、1]を省略して[、2]だけを保持しました。もう一つの答えは、dplyrを使わないでも動作し、代わりです。 –

+0

Rを長時間使用している場合、dplyrや他のライブラリのメンバー(tidyverse)は、必要なことを知らなかったあなたの深い恋人です。 – akaDrHouse

0

ソリューション:

for (i in 2:ncol(mtcars)) { 
    twocolumns <- data.frame(mtcars[,c(1,i)]) 
    write.csv(twocolumns[order(twocolumns[, 2]), ], paste0(colnames(mtcars)[i],'.txt'), row.names = F) 
} 

説明: あなたは値、したがって第二のカラム、twocoloumns[order(twocolumns[, 2]), ]に基づいてdataframeを注文したいです。 colnames(...)は、dataframeの列名のベクトルを返します。 iエントリをcolnames(...)[i]で抽出します。

+0

素晴らしい提案。私は2つの列を作成した後、ソート(順序)を統合することは考えていませんでした。助けてくれてありがとう!もう一つの答えは働くが、それはdplyrを使う。 –

関連する問題