如何更有效地编写以下代码(即在更少的行中)?
我似乎无法使用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
答案 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