使用循环创建变量或在 r 中应用

creating variables using loop or apply in r

我正在尝试基于 ifelse 函数在 R 中创建一系列变量:

comp1990<-ifelse(year_begin<1990 & year_end>1990,1,0)

comp1991<-ifelse(year_begin<1991 & year_end>1991,1,0)

comp1992<-ifelse(year_begin<1992 & year_end>1992,1,0)

我从 1970 年到 2007 年一直这样做。现在,我每年只有一行。

在stata中,我可以通过以下方式做到这一点:

forvalues n=1970(1)2007 {

gen comp\`n'== (year_begin<\`n' & year_end>\`n')

}

R 中是否有类似的直接方法来执行此操作?我知道 for 循环不是很好。也许使用申请?

我实际上做的是创建一个虚拟 = 1 如果银行分行存在于第 n 年,否则为 0(因此如果银行分行在第 n 年之前成立并且在第 n 年之后关闭),这意味着它在第 n 年运行。

在此先感谢您的帮助!

尝试:

 sapply(1970:2007,function(x){ ifelse(year_begin<x & year_end>x,1,0) })

根据我对问题的理解,这是我设法达成的解决方案。更好地描述数据会有所帮助。

这是数据:

df<-data.frame(cbind(bank = c("bank1","bank2","bank3","bank4","bank5"), 
      year_begin = sample(1970:2007, 5, T),
      year_end = sample(1970:2007, 5, T) ))
df$year_begin<-as.numeric(as.character(df$year_begin))
df$year_end<-as.numeric(as.character(df$year_end))

我使用了两个 for 循环来构建变量名称和值:

构建 "comp+year" 列:

year<-c(1970:2007)
var<-list(length(year))
for(j in year){
    var[j-1969]<-paste('comp', j)
}

填写 "comp+year" 列表:

for(i in 1:nrow(df)){
    for(j in year){
       if(df$year_begin[i] < j & df$year_end[i] > j) 
         {var[[j-1969]]<-c(var[[j-1969]], 1)} 
       else 
         {var[[j-1969]]<-c(var[[j-1969]], 0)}
  }
}

列表到数据框:

a<-do.call(rbind, var)
names<-a[,1]
values<-as.data.frame(t(a[,2:6]))
colnames(values)<-names
print(values)  #you can cbind this to your original dataframe