gpt4 book ai didi

r - 从数据框中按组删除异常值的功能

转载 作者:行者123 更新时间:2023-12-01 09:43:53 25 4
gpt4 key购买 nike

我正在尝试从包含按变量 cond 分组的 xy 变量的数据框中删除异常值。

我创建了一个函数来根据箱线图统计数据删除异常值,并返回没有异常值的 df。该功能适用​​于原始数据时效果很好。但是,如果应用于分组数据,该功能不起作用,我得到了一个错误:

Error in mutate_impl(.data, dots) : 
Evaluation error: argument "df" is missing, with no default.

请问,我怎样才能更正我的函数以将向量 df$xdf$y 作为参数,并按组正确去除异常值?

enter image description here


我的虚拟数据:

set.seed(955)
# Make some noisily increasing data
dat <- data.frame(cond = rep(c("A", "B"), each = 22),
xvar = c(1:10+rnorm(20,sd=3), 40, 10, 11:20+rnorm(20,sd=3), 85, 115),
yvar = c(1:10+rnorm(20,sd=3), 200, 60, 11:20+rnorm(20,sd=3), 35, 200))


removeOutliers<-function(df, ...) {

# first, identify the outliers and store them in a vector
outliers.x<-boxplot.stats(df$x)$out
outliers.y<-boxplot.stats(df$y)$out

# remove the outliers from the original data
df<-df[-which(df$x %in% outliers.x),]
df[-which(df$y %in% outliers.y),]
}

# REmove outliers (try if function works)
removeOutliers(dat)

# Apply the function to group
# Not working!!!

dat_noOutliers<- dat %>%
group_by(cond) %>%
mutate(removeOutliers)

我发现这个函数可以从矢量数据中删除异常值。但是,我想从数据帧中的 df$xdf$y 向量中删除异常值。

remove_outliers <- function(x, na.rm = TRUE, ...) {
qnt <- quantile(x, probs=c(.25, .75), na.rm = na.rm, ...)
H <- 1.5 * IQR(x, na.rm = na.rm)
y <- x
y[x < (qnt[1] - H)] <- NA
y[x > (qnt[2] + H)] <- NA
y
}

( remove outliers by group in R )

最佳答案

由于您将此函数应用于整个 df,因此您应该改用 mutate_all。做:

dat_noOutliers<- dat %>%
group_by(cond) %>%
mutate_all(remove_outliers)

关于r - 从数据框中按组删除异常值的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53722679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com