如何从 R DataFrame 中的多列中删除异常值?
在本文中,我们将讨论如何在 R 编程语言中从多列中删除异常值。
为了从数据框中删除异常值,我们使用四分位距 (IQR) 方法。此方法使用第一个和第三个分位数来确定观察值是否为异常值。如果观察值是四分位距的 1.5 倍大于第三个四分位数或四分位距小于第一个四分位数的 1.5 倍,则认为它是异常值。
从 R 中的多列中删除异常值
为了找到 R 语言中的异常值,我们使用以下函数,其中我们首先使用 quantile()函数计算观测值的第一个和第三个分位数。然后我们将它们的差异计算为四分位距。然后,如果观察值是四分位距的 1.5 倍大于第三个四分位数或四分位距小于第一个四分位数的 1.5 倍,则返回 true。
Syntax:
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:
这是一个示例,我们从数据框的三列中删除异常值。
R
# 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'))
R
# 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'))
输出:
示例 2:
这是一个示例,我们从数据框的四列中删除异常值。
R
# 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'))
输出: