R 如何计算一行中的所有异常值?
在R中(我太新了),我试图创建一个R 如何计算一行中的所有异常值?,r,dataframe,R,Dataframe,在R中(我太新了),我试图创建一个outlier\u 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
outlier\u 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
有没有一种简单、防错的方法可以做到这一点?在注释中进行解释并使用预期输出进行编辑后,它变得非常简单。
首先读取数据
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)
请注意,您无需显式创建中间变量
out
。用上面的代码做一行。这取决于你。我希望它有可读的代码。在注释中进行解释并使用预期输出进行编辑后,它变得非常简单。首先读取数据
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)
请注意,您无需显式创建中间变量
out
。用上面的代码做一行。这取决于你。我希望它有可读的代码。如果你能为df$var1
提供一个最小的数据集,这样问题就可以重现,那么就更容易发现问题。这些不是“每行值”
,也不是离群值,df$var1
是一列。嗨!谢谢你们两位@Heikki我想你可以使用任何你想要的数据集,比如iris[sample(nrow(iris),10),]
(当然,只使用数字变量)@RuiBarradas是的,我试图知道df$var1
值是否是特定行的异常值,并将其值添加到同一行的outlier\u count
变量中。数据样本iris[sample(nrow(iris),10),]
没有NAs。@Heikki-true,插入一些NA值很容易,但您也可以使用空气质量:summary(airquality)
,Ozone和Solar.R具有NA值。如果您可以为df$var1
提供最小数据集,以便重现问题,那么就更容易发现问题。这些不是每行值,无论是否存在异常值,df$var1
都是一列。嗨!谢谢你们两位@Heikki我想你可以使用任何你想要的数据集,比如iris[sample(nrow(iris),10),]
(当然,只使用数字变量)@RuiBarradas是的,我试图知道df$var1
值是否是特定行的异常值,并将其值添加到同一行的outlier\u count
变量中。数据样本iris[sample(nrow(iris),10),]
没有NAs。@Heikki-true,插入一些NA值很容易,但您也可以使用空气质量:摘要(空气质量)
,臭氧和太阳能。R有NA值。谢谢!我添加了na.rm=TRUE
,以避免计算na值时出现错误。然后如何指定应计算哪些列?假设我不想把var7
包括在总数中。@afontcu你可以做sapply(df[,1:6],…)
或sapply(df[,-7],…)
。在第一种情况下,你说你想对哪些列应用函数,在第二种情况下,你不想对哪些列应用函数。非常感谢你!工作起来很有魅力。谢谢你的耐心。谢谢!我添加了na.rm=TRUE
,以避免计算na值时出现错误。然后如何指定应计算哪些列?假设我不想把var7
包括在总数中。@afontcu你可以做sapply(df[,1:6],…)
或sapply(df[,-7],…)
。在第一种情况下,你说你想对哪些列应用函数,在第二种情况下,你不想对哪些列应用函数。非常感谢你!工作起来很有魅力。谢谢你的耐心。