2017-08-27 59 views
0

我怎样才能更有效地编写下面的代码(即少用几行)?如何更有效地编写下面的代码?

我似乎无法定义一个函数与去年参数,并喜欢写东西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 

回答

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。

for(y in unique(dat$year)) { 
    dat[[paste0("Year", y)]] <- (dat$Year==y)*1 
} 
相关问题