【发布时间】:2017-11-20 00:42:47
【问题描述】:
我有一个 data.frame,我想汇总它以获得每列的最高(5 个值)和最低(5 个值)。我使用了iris 作为可重现的示例。
iris中所有变量的最高5个值可以使用
df_h <- iris %>%
dplyr::select(Species, everything()) %>%
tidyr::gather("id", "value", 2:5) %>%
dplyr::arrange(Species, id, desc(value)) %>%
dplyr::group_by(Species, id ) %>%
top_n(n = 5) %>%
dplyr::mutate(category = "high")
对于最低的 5 个值,我使用了相同的值,但 top_n(n = -5) 除外。
df_l <- iris %>%
dplyr::select(Species, everything()) %>%
tidyr::gather("id", "value", 2:5) %>%
dplyr::arrange(Species, id, desc(value)) %>%
dplyr::group_by(Species, id ) %>%
top_n(n = -5) %>%
dplyr::mutate(category = "low")
然后,我将两个 data.frame 连接在一起 df_h(最高 5 个值)和 df_l(最低 5 个值)。
df_fin <- df_h %>% bind_rows(., df_l)
我正在寻找一种高效/更短的方法来获得相同的结果,而无需创建两个 data.frame 并加入它们。任何建议将不胜感激。
【问题讨论】: