Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在r中使用循环或应用创建变量_R_For Loop_Stata_Sapply - Fatal编程技术网

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

在r中使用循环或应用创建变量,r,for-loop,stata,sapply,R,For Loop,Stata,Sapply,我正试图基于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) comp1990试试: sapply(1

我正试图基于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)
comp1990试试:

sapply(1970:2007,函数(x){ifelse(年开始,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))

dfA更好的问题是,您为什么要这样做?这似乎很奇怪。为两个不同的用户连续出现的几乎相同的问题提供一个解释也很有帮助:看起来您正在将数据“划分”为块,但我不理解您为什么要这样做。请为数据块添加所需的处理逻辑,以便我们找到更好的解决方案(*应用函数等)?当需要二进制结果时,
as.integer(year\u beginx)
将比
ifelse()
(仅是逻辑向量的整数值)更有效。太棒了,谢谢!!!!这就成功了。最后的代码是这样的:几年
 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))
year<-c(1970:2007)
var<-list(length(year))
for(j in year){
    var[j-1969]<-paste('comp', j)
}
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