r语言 - For循环与ifelse语句创建变量



我试图使用一个for循环嵌套的ifelse语句在数据框架中生成一个指标变量。不过,我对for循环还是个新手。我发现的其他问题似乎比我的数据集更复杂,所以答案并不适合我的情况。

基本上,我有调查收件人和他们老板的名字,我需要确定哪些收件人也被列为老板。

我有一个老板名字的向量,我知道这些名字也是调查的接收者。例如(名称已更改):

bossrecip<-c("Tamira Hughes", "John Legend", "Robert Collins") 

然后包含收件人全名的列是"RecipientFullName">

RecipientFullName<-c("Gosha Jennings", "Robert Stew", "John Legend")
both_recip_boss<-0
SurveyData<-data.frame(RecipientFullName, both_boss_recip)

"both_recip_boss"是我想把一个1,如果收件人也是一个老板,并保持它作为一个0,如果他们只是一个收件人

我尝试过的for循环,我认为我最接近的是

for (b in bossrecip) {
ifelse(b==SurveyData$RecipientFullName | SurveyData$both_recip_boss==1, 
SurveyData$both_recip_boss<-1, 
SurveyData$both_recip_boss<-0)
}

之所以包含OR语句,是因为我不希望b中的下列名称覆盖前面的循环工作。然而,这只给了我一行1,而我知道在我的完整数据集中至少应该有91行1。我肯定我在for循环的逻辑上搞砸了什么,但我不确定是什么。

我将非常感谢任何建议和见解,我做错了。谢谢你!

不需要循环。使用%in%,您可以这样做:

SurveyData$both_recip_boss <- +(SurveyData$RecipientFullName %in% bossrecip)
SurveyData
#>   RecipientFullName both_recip_boss
#> 1    Gosha Jennings               0
#> 2       Robert Stew               0
#> 3       John Legend               1

我重新安排了循环逻辑以显示一种方法。

然而,R是一种向量化语言,在计算速度和可编程性方面的许多好处来自于向量化代码或使用内部循环替换函数(如apply族)

bossrecip<-c("Tamira Hughes", "John Legend", "Robert Collins") 
SurveyData<-data.frame(RecipientFullName=c("Gosha Jennings", "Robert Stew", "John Legend"),
both_boss_recip=0)
for (i in 1:nrow(SurveyData)){
SurveyData$both_boss_recip[i]<-ifelse(SurveyData$RecipientFullName[i] %in% bossrecip, 
1, 
0)
}
SurveyData
RecipientFullName both_boss_recip
1    Gosha Jennings               0
2       Robert Stew               0
3       John Legend               1

最新更新