我正在尝试计算一些摘要信息,以帮助我检查数据集中不同组中的异常值。我可以使用我想要的输出类型dplyr::group_by()
and dplyr::summarise()
- 包含给定变量的每个组的摘要信息的数据框。像这样的事情:
Sepal.Length_outlier_check <- iris %>%
dplyr::group_by(Species) %>%
dplyr::summarise(min = min(Sepal.Length, na.rm = TRUE),
max = max(Sepal.Length, na.rm = TRUE),
median = median(Sepal.Length, na.rm = TRUE),
MAD = mad(Sepal.Length, na.rm = TRUE),
MAD_lowlim = median - (3 * MAD),
MAD_highlim = median + (3 * MAD),
Outliers_low = any(Sepal.Length < MAD_lowlim, na.rm = TRUE),
Outliers_high = any(Sepal.Length > MAD_highlim, na.rm = TRUE)
)
Sepal.Length_outlier_check
但是,我希望能够将其放入 For 循环中,以便能够为数据集中的每个不同变量生成类似的摘要数据帧。我是使用循环的新手,但我认为它可能需要看起来像这样:
vars <- list(colnames(iris))
for (i in vars) {
x <- iris %>%
dplyr::group_by(Species) %>%
dplyr::summarise(min = min(i, na.rm = TRUE),
max = max(i, na.rm = TRUE),
median = median(i, na.rm = TRUE),
MAD = mad(i, na.rm = TRUE),
MAD_lowlim = median - (3 * MAD),
MAD_highlim = median + (3 * MAD),
Outliers_low = any(i < MAD_lowlim, na.rm = TRUE),
Outliers_high = any(i > MAD_highlim, na.rm = TRUE)
)
assign(paste(i, "Outlier_check", sep = "_"), x)
}
我知道这不起作用,因为在摘要函数中i
实际上没有引用任何数据。我不确定我需要做什么才能让它发挥作用!我将非常感谢您的帮助,或者任何有关如何更优雅地完成所有这一切的建议。
我不愿意使用 dplyr::summarise_all() 因为它为所有变量输出一个汇总表,并且由于我正在处理的真实数据集有许多变量,因此该汇总表会变得太大而无法轻松查看它。
Thanks.