用 NA 替换异常值
Replace outliers with NA
我找到了这个函数,我想调整它以用 NA 替换异常值而不是删除观察值。
我试图在这一行中添加 <-NA
data <- data[!outliers(data[[col]]),]
,但我无法让它工作。你能帮我改编一下吗?
在这里您可以找到带有一些模拟数据的代码。如果您需要其他东西,请告诉我。
在此先感谢您。
cov.matone <- matrix(c(1, .0,
.0, 1), nrow = 2)
data <- data.frame(MASS::mvrnorm(n = 1e4,
mu = c(4, 4),
Sigma = cov.matone))
outliers <- function(x) {
Q1 <- quantile(x, probs=.25, na.rm=T)
Q3 <- quantile(x, probs=.75, na.rm=T)
iqr = Q3-Q1
upper_limit = Q3 + (iqr*1.5)
lower_limit = Q1 - (iqr*1.5)
x > upper_limit | x < lower_limit
}
remove_outliers <- function(data, cols = names(data)) {
for (col in cols) {
data <- data[!outliers(data[[col]]),]
}
data
}
data_nooutliers <- remove_outliers(data, c('X1', 'X2' ))
不是将循环结果分配给输入数据,而是使用 is.na<-
将 NA
值分配给函数 outliers
.
给出的元素
remove_outliers <- function(data, cols = names(data)) {
for (col in cols) {
is.na(data[[col]]) <- outliers(data[[col]])
}
data
}
备注
以下函数与函数 outliers
完全相同,但更简单。
outliers2 <- function(x) x %in% boxplot.stats(x)$out
s1 <- lapply(names(data), \(x) outliers(data[[x]]))
s2 <- lapply(names(data), \(x) outliers2(data[[x]]))
identical(s1, s2)
#[1] TRUE
我找到了这个函数,我想调整它以用 NA 替换异常值而不是删除观察值。
我试图在这一行中添加 <-NA
data <- data[!outliers(data[[col]]),]
,但我无法让它工作。你能帮我改编一下吗?
在这里您可以找到带有一些模拟数据的代码。如果您需要其他东西,请告诉我。
在此先感谢您。
cov.matone <- matrix(c(1, .0,
.0, 1), nrow = 2)
data <- data.frame(MASS::mvrnorm(n = 1e4,
mu = c(4, 4),
Sigma = cov.matone))
outliers <- function(x) {
Q1 <- quantile(x, probs=.25, na.rm=T)
Q3 <- quantile(x, probs=.75, na.rm=T)
iqr = Q3-Q1
upper_limit = Q3 + (iqr*1.5)
lower_limit = Q1 - (iqr*1.5)
x > upper_limit | x < lower_limit
}
remove_outliers <- function(data, cols = names(data)) {
for (col in cols) {
data <- data[!outliers(data[[col]]),]
}
data
}
data_nooutliers <- remove_outliers(data, c('X1', 'X2' ))
不是将循环结果分配给输入数据,而是使用 is.na<-
将 NA
值分配给函数 outliers
.
remove_outliers <- function(data, cols = names(data)) {
for (col in cols) {
is.na(data[[col]]) <- outliers(data[[col]])
}
data
}
备注
以下函数与函数 outliers
完全相同,但更简单。
outliers2 <- function(x) x %in% boxplot.stats(x)$out
s1 <- lapply(names(data), \(x) outliers(data[[x]]))
s2 <- lapply(names(data), \(x) outliers2(data[[x]]))
identical(s1, s2)
#[1] TRUE