R语言 如何从R数据框架的多列中移除异常值
在这篇文章中,我们将讨论如何在R编程语言中从多列中移除异常值。
为了从数据框中移除异常值,我们使用四分位数范围(IQR)方法。这种方法使用第一和第三四分位值来确定一个观察值是否是异常值。如果一个观察值是大于第三四分位数的1.5倍,或小于第一四分位数的1.5倍,它就被认为是一个离群值。
从R语言的多个列中移除离群点
要在R语言中找到离群点,我们使用以下函数,首先通过quantile()函数计算出观察值的第一和第三四分位数。然后我们把它们的差值计算为四分位数范围。然后,如果一个观察值比第三四分位数大1.5倍,或比第一四分位数小1.5倍的四分位数,则返回真。
语法:
detect_outlier <\- function(x) {
Quantile1 <\- quantile(x, probs=.25)
Quantile3 <\- quantile(x, probs=.75)
IQR = Quantile3-Quantile1
x > Q3 + (iqr*1.5) | x < Q1 - (iqr*1.5) }
然后,一旦识别出离群点,我们就用上述函数测试它们,将离群点去除。
例1 :
这里,是一个例子,我们从数据框架的三列中移除离群点。
# create sample data frame
sample_data < - data.frame(x=c(1, 2, 3, 4, 3, 2, 3, 4, 4, 5, 0),
y=c(4, 3, 5, 7, 8, 5, 9, 7, 6, 5, 0),
z=c(1, 3, 2, 9, 8, 7, 0, 8, 7, 2, 3))
print("Display original dataframe")
print(sample_data)
# create detect outlier function
detect_outlier < - function(x) {
# calculate first quantile
Quantile1 < - quantile(x, probs=.25)
# calculate third quantile
Quantile3 < - quantile(x, probs=.75)
# calculate inter quartile range
IQR = Quantile3-Quantile1
# return true or false
x > Quantile3 + (IQR*1.5) | x < Quantile1 - (IQR*1.5)
}
# create remove outlier function
remove_outlier < - function(dataframe,
columns=names(dataframe)) {
# for loop to traverse in columns vector
for (col in columns) {
# remove observation if it satisfies outlier function
dataframe < - dataframe[!detect_outlier(dataframe[[col]]), ]
}
# return dataframe
print("Remove outliers")
print(dataframe)
}
remove_outlier(sample_data, c('x', 'y', 'z'))
输出
例2 :
这里,是一个例子,我们从数据框架的四列中移除异常值。
# create sample data frame
sample_data < - data.frame(x=c(-1, 2, 3, 4, 3, 2, 3, 4, 4, 5, 10),
y=c(-4, 3, 5, 7, 8, 5, 9, 7, 6, 5, 10),
z=c(-1, 3, 2, 9, 8, 7, 0, 8, 7, 2, 13),
w=c(10, 0, 1, 0, 1, 0, 1, 0, 2, 2, 10))
print("Display original dataframe")
print(sample_data)
# create detect outlier function
detect_outlier < - function(x) {
# calculate first quantile
Quantile1 < - quantile(x, probs=.25)
# calculate third quantile
Quantile3 < - quantile(x, probs=.75)
# calculate inter quartile range
IQR = Quantile3-Quantile1
# return true or false
x > Quantile3 + (IQR*1.5) | x < Quantile1 - (IQR*1.5)
}
# create remove outlier function
remove_outlier < - function(dataframe,
columns=names(dataframe)) {
# for loop to traverse in columns vector
for (col in columns) {
# remove observation if it satisfies outlier function
dataframe < - dataframe[!detect_outlier(dataframe[[col]]), ]
}
# return dataframe
print("Remove outliers")
print(dataframe)
}
remove_outlier(sample_data, c('x', 'y', 'z', 'w'))
输出