首页 > 解决方案 > 使用两个条件创建一个 for 循环以在 R 中分配一个变量,但在完成所有迭代后,答案没有意义

问题描述

尝试对数据集中的变量运行 for 循环,以找出低于 25% 和高于 99% 的异常值。当条件满足时,我需要一个新的变量 outlier = 1,在其他情况下需要 outlier = 0。我已经运行了下面的代码,但似乎我做错了什么,因为在代码的末尾,当我打印异常值时它输出 0,而且它不可能是正确的,因为数据集中有满足条件的数字.

这是代码:

for (i in income) {
if (i < quantile(income, prob = 0.25)) {
    outlier = 1
  } else if (i > quantile(income, prob = 0.99)) {
  outlier = 1 
  } else {
  outlier = 0
  }
}
print(outlier)

标签: rloopsfor-loopoutliersstat

解决方案


这是因为异常值在每次迭代中都会更新。我们可以事先创建一个向量,然后遍历“收入”序列,更新每个位置的“异常值”。

outlier <- integer(length(income))
for (i in seq_along(income)) {
if (income[i] < quantile(income, prob = 0.25)) {
    outlier[i] = 1
  } else if (income[i] > quantile(income, prob = 0.99)) {
  outlier[i] = 1 
  } else {
  outlier[i] = 0
  }
}

注意:这可以通过矢量化方式完成

qnt <- quantile(income, prob = c(0.25, 0.99))
+(income > qnt[1]|income < qnt[2])

推荐阅读