在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
。
这样做有一种简单,防错的方法吗?
答案 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.05
和0.95
分位数之下或之上考虑异常值。如果你愿意,可以改变它。
out <- sapply(df, function(x) x < quantile(x, 0.05) | x > quantile(x, 0.95))
df$outlier_count <- rowSums(out)
df
请注意,您无需显式创建中间变量out
。并从上面的代码中制作一个单行程。这取决于你。我更喜欢它具有可读代码。