gpt4 book ai didi

r - 获得每组 `summary` 输出的整洁方法?

转载 作者:行者123 更新时间:2023-12-03 18:36:06 25 4
gpt4 key购买 nike

我的代码经常使用 tapplysummary 如下所示:

data <- tibble(
year = rep(2018:2021, 3),
x = runif(length(year))
)

tapply(data$x, data$year, summary)
输出看起来像:
$`2018`
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.3914 0.5696 0.7477 0.6668 0.8045 0.8614

$`2019`
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.1910 0.2863 0.3816 0.4179 0.5313 0.6809

(etc.)
有没有办法在小标题中获得类似 summary 的输出?
所需的输出,使用丑陋的代码:
tapply(data$x, data$year, summary)%>% 
map(~ as.numeric(round(.x, 2))) %>%
map_dfr(set_names, names(summary(1))) %>%
add_column(year = 2018:2021, .before = 1)
# A tibble: 4 x 7
year Min. `1st Qu.` Median Mean `3rd Qu.` Max.
<int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 2018 0.39 0.570 0.75 0.67 0.8 0.86
2 2019 0.19 0.290 0.38 0.42 0.53 0.68
3 2020 0.01 0.35 0.7 0.55 0.82 0.93
4 2021 0.06 0.15 0.24 0.32 0.45 0.66
我希望有一个很好的 dplyr 函数组合来做得更好——我获得所需输出的代码很糟糕。
当然,我希望不必重写 base R 的 summary 函数,如下所示:
summarise(`Min` = min(x), `1st Qu.` = quantile(x, 0.25), ...)

最佳答案

这是一个简洁的tidyverse方式。

library(dplyr)
library(purrr)
library(tidyr)

data %>%
nest_by(year) %>%
mutate(data = map(data, summary)) %>%
unnest_wider(data)

# # A tibble: 4 x 7
# year Min. `1st Qu.` Median Mean `3rd Qu.` Max.
# <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 2018 0.105 0.256 0.407 0.307 0.407 0.407
# 2 2019 0.0354 0.205 0.375 0.313 0.452 0.529
# 3 2020 0.272 0.467 0.662 0.546 0.684 0.705
# 4 2021 0.00564 0.107 0.208 0.252 0.375 0.542

您也可以只转换原始行的表格输出。请注意,这里将 year 转换为字符,因此您可能希望将其更改回来。
library(purrr)

tapply(data$x, data$year, summary) %>%
map_dfr(c, .id = "year")

# # A tibble: 4 x 7
# year Min. `1st Qu.` Median Mean `3rd Qu.` Max.
# <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 2018 0.105 0.256 0.407 0.307 0.407 0.407
# 2 2019 0.0354 0.205 0.375 0.313 0.452 0.529
# 3 2020 0.272 0.467 0.662 0.546 0.684 0.705
# 4 2021 0.00564 0.107 0.208 0.252 0.375 0.542

关于r - 获得每组 `summary` 输出的整洁方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67347688/

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