簡體   English   中英

使用循環創建變量或在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循環不好。 也許使用申請?

我實際上要做的是,如果第n年存在一個銀行分支機構,則創建一個啞元= 1,否則創建0(因此,如果該銀行分支機構是在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM