r - 使用两个条件创建一个 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)
解决方案
这是因为异常值在每次迭代中都会更新。我们可以事先创建一个向量,然后遍历“收入”序列,更新每个位置的“异常值”。
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])
推荐阅读
- python - 在线法官给出错误答案
- python-3.x - 使用 Pandas 读取 excel 文件时如何避免“不支持的文件格式”错误
- azure - 我可以在 Azure 警报自定义负载中包含 alertId
- powerbi - 使用 PowerBI (DAX) 计算经常性客户,得到计算错误
- azure-active-directory - Microsoft Intune 如何更改设置(例如密码策略)以保持注册表值不变?
- c# - 批量插入时ADO.net服务器超时,如何改进?
- amazon-web-services - 爬虫如何比直接连接到数据库和检索数据好得多?
- javascript - 为什么我的删除事件侦听器不起作用?
- javascript - 在功能组件中使用外部 js 库
- jooq - 使用 MDC 的 JOOQ 日志