[英]Creating a loop in R to apply the same functions to many similarly named variables
[英]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.