问题描述
尝试对数据集中的变量运行for循环,以找到低于25%的百分比和高于99%的异常值。当条件满足时我需要一个新的变量离群值= 1,在其他情况下,我需要一个离群值= 0。我已经运行了下面的代码,但似乎我做错了,因为在代码的结尾,当我打印异常值时,它输出0,并且这是不正确的,因为数据集中存在满足条件的数字
这是代码:
export default function Account() {
const [token,setToken] = useState(sessionStorage.getItem('token') || '');
const [register,setRegister] = useState(sessionStorage.getItem('register') || '');
window.addEventListener("storage",e => {
setToken(sessionStorage.getItem('token'));
setRegister(sessionStorage.getItem('register'));
});
return (
<div className='container'>
<div className='account-container'>
{ token && <AccountProfile /> }
{ !token && (register ? <RegisterUser /> : <SignInToAccount />)}
</div>
</div>
);
};
解决方法
这是因为离群值在每次迭代中都得到更新。我们可以先创建一个向量,然后遍历“收入”的序列,更新每个位置的“离群值”。
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])