【发布时间】:2018-12-07 16:57:41
【问题描述】:
我有一个由数值组成的数据框。我计算了每列的标准差和平均值,并创建了Upper_Bound 和Lower_Bound 向量,如下所示:
std_devs = apply(exp_vars[,sapply(exp_vars,is.numeric)], 2, sd)
means = apply(exp_vars[,sapply(exp_vars,is.numeric)], 2, mean)
Upper_Bound = means + 3*std_devs
Lower_Bound = means - 3*std_devs
现在我想检测至少有一个值不在相关上限和下限之间的行。例如,列 j 中的值必须等于或大于 Lower_Bound[j] 且等于或小于 Upper_Bound[j],如果行 i 中至少有一个值违反此条件,我想保存该行的索引(I也有行名,保存行名也可以。)我想要获得的是一个索引向量(或行名),它显示了所有违反规则的行。我尝试了以下方法:
outliers = apply(my_data ,1, between(x,Lower_Bound, Upper_Bound,incbounds = TRUE))
但我想期望在连续自动遍历每个值并将它们与相关边界进行比较时,这太过分了。这是我第二次失败的绝望尝试:
outliers = apply(exp_vars_numeric,1, apply(x,2,between(x,Lower_Bound, Upper_Bound, incbounds = TRUE)))
我知道我可以使用 for 循环来做到这一点,但我希望有一个更有效的解决方案。任何建议都非常感谢。
提前致谢。
【问题讨论】: