【发布时间】: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