【发布时间】:2021-12-18 21:54:23
【问题描述】:
在 STATA 中,在循环中动态创建变量很容易,因为引号 `' 标识了迭代器。这个例子是创建一个二进制变量 Y200X,如果年份小于 200X,则取值为 1:
set obs 10
gen Year = 2005
replace Year = 2010 if _n > 4
forvalues y = 2005(1)2020 {
gen byte Y`y' = 0
replace Y`y' = 1 if Year < `y'
}
在 R 中,迭代器不能直接用于创建变量名。我发现最好的方法是首先在循环中创建变量,然后将它们组装回循环外的数据框中:
Year <- c(2005,2010,1996,1994,2001,2006,2019,2021, 2018,1987)
ls.output <- as.data.frame(Year)
for(y in 2005:2020) {
assign(paste0("Y",y), ifelse(ls.output$Year < y, 1, 0))
}
ls.output<- cbind(ls.output, Y2005,Y2006,Y2007,Y2009, Y2010)
有没有更好的方法可以直接在循环中执行此操作?
【问题讨论】: