2011-12-22 21 views
2

データフレームは〜50,000 X 200です。列名は、最終的に1から50の範囲の数値(store1、price1、time1、rate1、store2、価格2、時間2、レート2、...、店舗50、価格50、時間50、レート50)。私は各列の値に応じてダミー変数を作成しようとしていますが、Rがループ内の列名を処理するのに問題があります。forループ内の列名を扱うR

store1 price1  time1  rate1  store2  price2 time2  rate2 .... 
    A  55.55  08:09  1.44  B   44.44  11:09  1.46 
    C  55.55  08:09  1.44  G   44.44  11:09  1.46 
    X  55.55  08:09  1.44  E   44.44  11:09  1.46 
    D  55.55  08:09  1.44  S   44.44  11:09  1.46 

これまで私が運を尽くしたことはありません。

xform_data <- function(x) { 
     for(i in 1:50){ 
     storeX <- (paste("store",i,sep="")) 
     storeX2 <- ifelse(storeX == "A", 1, 2) 
     x <- cbind(x, storeX2 ) 
     } 
    x  
} 

ifelse(storeX == "A", ... 

試してみてください:

ifelse(x[,storeX] == "A", ... 

はまた、すべての新しい列がstoreX2呼び出されます

答えて

3

以下は、名前の代わりに、値を比較し比較します。あなたはそれらの名前を変更することを好むかもしれません:

x <- cbind(x, storeX2) 
colnames(x)[length(colnames(x))] <- storeX2 

(私はそれを行うにはよりエレガントな方法が存在することを確認しています。)

+0

それをしました。どうもありがとうございました! – screechOwl

+0

名前付けのアイデアもありがとう。それは私の次の質問になるだろう:) – screechOwl

+0

@screechOwl:どういたしまして。私の霊的な力が役立つのはうれしいよ;-) – NPE

1

@aixがループでこれを行うための適切な方法を与えた、しかし、あなたはそれを見つけることがあなたが最終結果を望むかどうかに応じて、他のツールを素早く簡単に使うことができます。 sapplyおよびlapplyのような機能を使用して、データフレーム(またはデータフレームのサブセット)のすべての列を同じ方法で処理できます。 model.matrix関数は、1ステップで変数をダミー変数(0と1)に変換します。その他のツールには、因子、switchmatchが含まれます。

関連する問題