【问题标题】:For Loop with ifelse statement to create variableFor Loop with ifelse 语句创建变量
【发布时间】:2022-12-03 14:32:34
【问题描述】:

我正在尝试使用带有嵌套 ifelse 语句的 for 循环在数据帧中生成指示变量。然而,我对使用 for 循环还很陌生。我发现的其他问题似乎比我的数据集更复杂,因此答案并不适合我的情况。

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

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

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

然后,包含收件人全名的列(我将其清理为与老板姓名相同的格式)是我的 SurveyData 中的“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-loop 我认为我最接近的是

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 中的以下名称覆盖以前的循环工作。但是,当我知道我的完整数据集中至少应该有 91 个时,这只会给我一行 1。我确定我用 for 循环的逻辑搞砸了一些东西,但我不确定它是什么。

对于我做错了什么的任何建议和见解,我将不胜感激。谢谢!

【问题讨论】:

  • 仅供参考,你不能分配里面ifelse 表达式,它不像允许代码块的 if 运算符。 stefan 演示的 %in% 方法是规范的、推荐的和最快的方法来完成你在这里需要的事情。
  • 循环的一个问题是在 b 的每次迭代中,代码执行 SurveyData$both_recip_boss<-0`(或 1),这会将整个列置为零。您将需要一种不同的方法来执行逐行循环。

标签: r for-loop if-statement


【解决方案1】:

不需要循环。使用 %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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-02
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 2016-07-05
    • 1970-01-01
    相关资源
    最近更新 更多