2017-08-27 10 views
0

以下のコードをもっと効率的に書くことができますか?以下のコードはどのようにしてより効率的に書くのですか?

私はまあ、私は最初のループでデータを読み込み、および添付したい

## Load data ## 

Data2011 = read.csv('2011.csv') 
Data2012 = read.csv('2012.csv') 
Data2013 = read.csv('2013.csv') 
Data2014 = read.csv('2014.csv') 

## Year dummies ## 

Data2011$D2011 = 1 
Data2011$D2012 = 0 
Data2011$D2013 = 0 
Data2011$D2014 = 0 

Data2012$D2011 = 0 
Data2012$D2012 = 1 
Data2012$D2013 = 0 
Data2012$D2014 = 0 

Data2013$D2011 = 0 
Data2013$D2012 = 0 
Data2013$D2013 = 1 
Data2013$D2014 = 0 

Data2014$D2011 = 0 
Data2014$D2012 = 0 
Data2014$D2013 = 0 
Data2014$D2014 = 1 

答えて

5

...年の引数で関数を定義し、Data{Year} = read.csv('{Year}.csv')またはData{Year}${Year+1} = 0などのようなものを書くように見えることはできません今年の新しいコラムあなたはモデルを適合しているとき

dat <- lapply(2011:2014, function(y) cbind(Year=y, read.csv(paste0(y, '.csv'))) 

は今、ダミーのための最も一般的な使用であるので、私はあなたが一緒にすべてのデータを入れたい推測しています。

dat <- do.call(rbind, dat) 

ほとんどのモデルのフィッティングでは、自分でダミーを作ることは決してありません。それはコンピュータの仕事です。あなたは、関心のある変数を要素にして、Rが正しいことをするだけです。

dat$Year <- factor(dat$Year) 

これはすべて私が通常行っていることです。しかし何らかの理由で私が実際にそれらのダミーを自分で作りたいと思ったら、私はまだコンピュータにこれを行い、それをデータセットに追加させます。

dums <- model.matrix(~0+Year, data=dat) 
dat <- cbind(dat, dums) 
、あなたも [[はあなたがアクセスしたり、変数名を作成するための文字列を使用することができますこのような何かを、行うことができループおよびアクセス変数する方法を学習する目的で

、および*1を変換し、 0/1にブール値。

for(y in unique(dat$year)) { 
    dat[[paste0("Year", y)]] <- (dat$Year==y)*1 
} 
関連する問題