2017-05-19 6 views
0

私は4つの項目があります。各アイテムには、各ロケーションのデータを含むランダムな数のロケーションがあります。私のコードは、場所をループし、位置データのデータフレームを作成します。その場所のデータを取得して対応するアイテムのデータフレームに配置し、そのアイテムの次の場所に移動すると、そのアイテムのデータフレームに追加されます。アイテムがアイテムデータフレームに追加されました。次のアイテムに移動し、別々の名前のデータフレームのプロセスを繰り返す必要があります。たとえば、アイテム1のデータフレームはitem1という名前で、アイテム2のデータフレームはitem2という名前でなければなりません。これを達成するためにassignおよびpaste0関数を使用しましたが、paste0は文字列を作成し、assign関数は認識しません私はデータを文字列ではなくデータフレームに割り当てたいと思っています。サンプルコードは以下に掲載されており、提供できる援助は非常に高く評価されています。forループでの割り当て

for (p in 1:4) # 1-4 because there are 4 items 
    { 
    #Initialize the item data frame 
    assign(paste0("item",p),data.frame(item_no=character(), x=integer(), y=integer(), data_val=integer())) 

     #Loop through all locations for this item ID 
     num_locations = sample(1:9,1) #Number of locations 
     for (i in 1:(num_locations)){ #Loop through each location 

     #Access data for current location (pulls from a database in actual code) 

     ################################################## 
     item_no <- p 
     x <- sample(-3:3,1) 
     y <- sample(-3:3,1) 
     data_val <- sample(0:100,1) 
     ################################################## 

     #################DATA FRAME###################### 
     assign(paste0("location_data",i),data.frame(item_no, x, y, data_val)) 
     assign(paste0("item",p), data.frame(rbind(paste0("item", p), paste0("location_data", p)))) 


     #paste0 creates a string and therefore is not recognized that I want to call the data within itemp or location_datap 
     #rbind needed because the loop through impact locations for a single item requries initialization of an empty data frame 
     #for the first time through the location loop, the empty itemp data frame is overwritten by the location_datap data frame and supplemented each location thereafter 


     ################################################ 
     } 

    } 
+3

あなたの質問はあまり明確ではなく、問題を解決する簡単な方法があります。 assign文の使用は一般的に推奨されません。私は、データフレームのリスト(下記の回答を参照)またはあなたのアイテム番号の余分な列を持つ大きなデータフレームを提案します。それはあなたの将来の分析要件に依存します。 – Dave2e

答えて

0

assignの代わりにリストを使用することをお勧めします。例:

items <- list() 
for (p in 1:4) { 
    items[[p]] <- data.frame(...) 
    ... 
    items[[p]] <- rbind(items[[p]], ...) 
} 

また、このヒントは2番目のループに使用できます。

関連する問題