2016-04-28 19 views
-1

forループ内にdata.frameを作成しようとしています。私は、ループの繰り返しのために値がベクトルに入った後に、data.frameの名前を付けたいと思います。R:ベクトルの値の後にdata.frameの名前を付けます

ベクトルはState data.frameでCity列から来ている:

State 

City Zip 
A  1 
B  2 
C  3 

私が試してみました何:

for(i in State$City){ 

i <- data.frame(sub=character(),street=character()) 
} 

をこれはdata.frame iないで値に名前を付けますベクター。

i 

sub street 

それは、ループ内の最初の繰り返しだった場合、私はdata.frameの名前がA

A 

sub street 

になりたいが、2回目の繰り返しであれば、その後B

3回目の反復あれば、 C

さらに詳しい情報が必要な場合は、私にお知らせください。

答えて

0

これはトリックを行う必要があります。使用assign

State = as.data.frame(list(City = c("A","B","C"), 
          ZIP = 1:3)) 
for(i in State$City){ 
    assign(i, data.frame(sub=character(),street=character())) 
} 
+0

答えが完全にうまくいかなかった理由は分かりません。ありがとうございました。 – Dre

+1

@Dre 'assign 'は広く悪い習慣とみなされているので、投票した可能性があります。私を信じて、あなたは道に迷ってしまいます。 – joran

+0

自分自身も 'assign'を使っていません。 @joranの名前付きリストはおそらくより良い方法です。 – anotherFishGuy

2

Rでこれを行う方法は、名前のリストで物事を維持することです:

dat_list <- replicate(3,data.frame(sub=character(),street=character()),simplify = FALSE) 
dat_list <- setNames(dat_list,c('A','B','C')) 

は、私はちょうど私の答えの自己のコードが含まれており、実行可能にするためにc('A','B','C')ではなくState$Cityを使用しました。

+0

私はそれを使用したいと思いますが、私はそれに問題があります。あなたのメソッドを試してみると、 'dat_list'を' 3'のリストとして取得します。各リストをdata.frameにしたい場合は、 'A < - as.data.frame(dat_list $ A)を行う必要があります。 – Dre

+0

@Dre実際には、結果は3つのデータフレームのリストであり、全体のポイントです。オブジェクト 'dat_list $ A'はすでにデータフレームです。 (データフレーム自体が特定のタイプのリストであるという技術的な詳細は無視されます) – joran

関連する問題