【问题标题】:IF condition for each record using R使用 R 的每条记录的 IF 条件
【发布时间】:2018-04-05 01:01:41
【问题描述】:

我正在尝试将 FICO 分数分为三类,并希望创建一个可以显示相应值的新列。

我的数据:

FICO
650
450
700

预期输出

FICO    Category
650     Moderate
450     Poor
700     Excellent

我为此写了一个 if 语句

model_data$ficocategory <- if (model_data$FICO>=350 && 
model_data$FICO<=500) {
print("POOR")
  } else if (model_data$FICO>=501 && model_data$FICO<=650) {
print("MODERATE")
  } else
    print("EXCELLENT")

但我得到的输出是

[1] "MODERATE"

【问题讨论】:

  • &amp;&amp; 未矢量化。使用&amp;
  • @JohnColeman 如果我只使用 '&' 它会输出 [1] "EXCELLENT"
  • 如果你想创建一个向量——你还应该使用ifelse() 函数 而不是if ... else 构造。另外——在赋值语句中间打印似乎有点奇怪。
  • 也尝试过这样做。 ifelse(model_data$FICO>=350 & model_data$FICO=501 & model_data$FICO= 350 & model_data$FICO
  • 试试model_data$ficocategory &lt;- ifelse(model_data$FICO&gt;=350 &amp; model_data$FICO&lt;=500,"POOR",ifelse(model_data$FICO&gt;=501 &amp; model_data$FICO&lt;=650,"MODERATE","EXCELLENT"))

标签: r if-statement


【解决方案1】:

这里发生了两件事:

1 - &amp;&amp; 只比较向量的第一个元素。因此,例如,model_data$FICO &gt;= 501 &amp;&amp; model_data$FICO &lt;= 650 只是比较比较双方返回的每个逻辑向量的第一个元素,对于您的数据来说,它是 TRUETRUE(650 >= 501 和 650 & 将解决这个问题,以便为每个元素比较返回一个逻辑向量。请参阅this 帖子了解更多信息。

2 - 已在 cmets 中解决。您希望使用向量化的ifelse 函数,该函数将执行逻辑比较并返回值向量。在您上面的评论中,只需将 "EXCELLENT" 移动到之前的 ifelse 语句中:... , "MODERATE", "EXCELLENT"))

【讨论】:

  • 感谢您提供详细的见解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-14
  • 1970-01-01
相关资源
最近更新 更多