如何更有效地编写以下代码?

时间:2017-08-27 00:46:41

标签: r

如何更有效地编写以下代码(即在更少的行中)?

我似乎无法使用Year参数定义函数并编写类似Data{Year} = read.csv('{Year}.csv')Data{Year}${Year+1} = 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 

1 个答案:

答案 0 :(得分:5)

好吧,我首先在循环中读取数据,并附上一年的新列。

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。

*1