2016-05-19 12 views
0

私はRとstackoverflowを初めて使うので、これはおそらく非常に簡単な解決策になります。Rのデータフレームの割り当てを繰り返す

私は20種類のテーマからのデータセットを持っています。将来、私はこのデータに対して多くの異なるアクションを実行する必要があり、すべての個々のセットに対してこのアクションを繰り返す必要があります。それらを別々に分析し、それらを再結合する。 私の質問はどのように私はこのプロセスを自動化することができます: P4 <- read.delim("P4Rtest.txt") P7 <- read.delim("P7Rtest.txt") P13 <- read.delim("P13Rtest.txt") などなどなど

私はforループでループ試みたが、一意の名前を持つ新しいdata.frameを作成して立ち往生して見ています毎回。

はこのようなものをやってのさまざまな方法の束があります

+9

は多くの記事があります:あなたの数字は、私がここで使用してきたように完全な配列でない場合は、

さらにR.に新しいです、あなただけのように使用されているどのような数のベクトルを定義することができますそれで、この問題について。 [ここ](http://stackoverflow.com/questions/11218498/reading-multiple-files-into-multiple-data-frames-in-r)と[ここ](http://stackoverflow.com/questions/)を参照してください。 36555020/read-multiple-files-from-directory-in-r)を参照してください。複数のファイルをリストオブジェクトに読み込むことがベストプラクティスと見なされます。あなたはリンクされたポストでこれの例を見ることができます。なぜこれがSO上の良いアイデアなのかの議論もあります。たとえば、[here](http://stackoverflow.com/questions/17499013/how-do-i-make-a-list-of-data-frames/24376207)を参照してください。 – lmo

答えて

5

これを行うRの方法は、すべてのデータセットを名前付きリストにまとめることです。そのためには、以下を使用できます。nはファイル数です。

nm <- paste0("P", 1:n) ## create the names P1, P2, ..., Pn 
dfList <- setNames(lapply(paste0(nm, "Rtest.txt"), read.delim), nm) 

ここで、dfListにすべてのデータセットが含まれます。 P1の場合はdfList$P1P2の場合はdfList$P2などで個別にアクセスできます。

0

あなたの助けをいただき、ありがとうございます。 rbindを使用すると、すべてのデータを1つのデータフレームにまとめることができます。ここでの最初の答えは、これを行う良い方法です。Replace rbind in for-loop with lapply? (2nd circle of hell)

すべてを1つのデータフレームにまとめる場合は、参加者を識別する列を追加する必要があります。だからではなく、

P4 <- read.delim("P4Rtest.txt") 
... 

のあなたは、あなたには、いくつかの理由のためにそれらの別々のデータフレームを維持したい場合は、リストでそれらを保つことができる

my.list <- vector("list", number.of.subjects) 
for(participant.number in 1:number.of.subjects){ 
    # load individual participant data 
    participant.filename = paste("P", participant, "Rtest.txt", sep="") 
    participant.df <- read.delim(participant.filename) 
    # add a column: 
    participant.df$participant.number = participant.number 
    my.list[[i]] <- participant.df 
} 
solution <- rbind(solution, do.call(rbind, my.list)) 

のようなものを持っているでしょう(最後rbindオフラインのまま)データフレームに何かしたいときはいつでもlapply(my.list, function(participant.df) { stuff you want to do })を使用してください。

-2

assignを使用できます。すべてのファイルは、あなたが示したのと同様の形式を持っていると仮定すると、これはあなたのために動作します:

# Define how many files there are (with the numbers). 
numFiles <- 10 

# Run through that sequence. 
for (i in 1:numFiles) { 

    fileName <- paste0("P", i, "Rtest.txt") # Creating the name to pull from. 
    file <- read.delim(fileName) # Reading in the file. 
    dName <- paste0("P", i) # Creating the name to assign the file to in R. 
    assign(dName, file) # Creating the file in R. 

} 

あり、より速く、よりコンパクトであり、他の方法がありますが、私は、これは特に誰かのために、読みやすくするために見つける人

numFiles <- c(1, 4, 10, 25) 
+0

このように 'assign'関数を使うことは素晴らしい解決策ではありません。タスクを達成することはできますが、データフレームはリストに入れるのではなく、組織化されていません。 'for'ループを実行すると、複製された方法でオブジェクトを処理することが期待されます。この組織が存在しない環境では、出力をリストにまとめるのではなく、出力を組織化する方がよいでしょうか?もちろん、 'paste'で' get'を使って操作を逆にすることもできますが、他のオブジェクトの名前が似ている場合は、フープを飛ばして正しいオブジェクトをフィルタリングする必要があります。 – lmo

+0

個人的には、データフレームを独自のオブジェクトとして存在させ、R-Studioの右上隅に表示することができます。私はあなたの推理を理解していますが、この場合、私の個人的な好みです。私は、あなたが言うように、より高速でよりコンパクトなメソッドがあることに気づきました。私は、Rに新しい誰かのためにはるかに読みやすい割り当てを見つけるだけです。 – giraffehere

関連する問題