使用两个条件进行for循环以在R中分配变量,但是在完成所有迭代后,答案就没有意义了

问题描述

尝试对数据集中的变量运行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])