【发布时间】:2018-10-20 17:19:02
【问题描述】:
我正在尝试计算一些摘要信息,以帮助我检查数据集中不同组中的异常值。我可以使用dplyr::group_by() 和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() 因为它为所有变量输出一个汇总表,并且由于我正在处理的真实数据集有很多变量,这个汇总表会变得太大而无法轻松查看。
谢谢。
【问题讨论】:
标签: r for-loop dplyr grouping summary