如何计算连续的所有异常值?

时间:2017-11-05 12:27:35

标签: r dataframe

在R(我这么新)我试图创建一个outlier_count变量,其中一个整数表示每行的离群值的数量。

所以,让我们说我的数据集看起来像这样,假设" 10"是一个异常值:

    var1 var2 var3 var4 var5 var6 var7
a      1    1   10   10    1    1    1
b     10    1    1    1    1    1    1
c      1    1    1    1    1    1    1
d      1    1    1    1    1    1    1
e      1    1    1    1    1    1    1
f      1    1    1    1    1    1    1

我想最终得到类似的东西:

    var1 var2 var3 var4 var5 var6 var7 outlier_count
a      1    1   10   10    1    1    1             2
b     10    1    1    1    1    1    1             1
c      1    1    1    1    1    1    1             0
d      1    1    1    1    1    1    1             0
e      1    1    1    1    1    1    1             0
f      1    1    1    1    1    1    1             0

所以,在每一行中,我都知道有多少值是异常值。

我尝试了几个函数,但当单个列为NA时,变量最终为NA

这样做有一种简单,防错的方法吗?

1 个答案:

答案 0 :(得分:1)

在评论中进行解释并使用预期输出进行编辑后,它变得非常简单 首先阅读数据。

df <- read.table(text = "
    var1 var2 var3 var4 var5 var6 var7
a      1    1   10   10    1    1    1
b     10    1    1    1    1    1    1
c      1    1    1    1    1    1    1
d      1    1    1    1    1    1    1
e      1    1    1    1    1    1    1
f      1    1    1    1    1    1    1
", header = TRUE)

现在的代码。我会在0.050.95分位数之下或之上考虑异常值。如果你愿意,可以改变它。

out <- sapply(df, function(x) x < quantile(x, 0.05) | x > quantile(x, 0.95))
df$outlier_count <- rowSums(out)
df

请注意,您无需显式创建中间变量out。并从上面的代码中制作一个单行程。这取决于你。我更喜欢它具有可读代码。