gpt4 book ai didi

r - purrr 映射未生成整齐的数据

转载 作者:行者123 更新时间:2023-12-02 09:14:13 25 4
gpt4 key购买 nike

感谢这个网站,我使用 R purrr 包来聚合基于多列的数据。聚合按我想要的方式工作,但输出却不然。以下是使用 mtcars 数据集的示例。

library(dplyr)
library(purrr)
#pull in data
data <- mtcars
#get colnames
variable1 <- colnames(data)
#map the variables
t1 <- map(variable1, ~ data %>%
group_by_at(.x) %>%
summarize(number = mean(mpg))) %>%
set_names(variable1) %>%
bind_rows(., .id = 'variable')

如果我期望三列(预测变量、每个变量中的级别、聚合),我有 8 列。请参见下图:

Output of above code

如何将我的代码放在顶部并生成整洁的数据集?

最佳答案

实现此目的的一个简单方法是将数据 reshape 为长格式,这样您就可以与普通 dplyr 进行聚合:

library(tidyverse)

mpg_means <- mtcars %>%
gather(variable, value, -mpg) %>%
group_by(variable, value) %>%
summarise(mean_mpg = mean(mpg))

mpg_means
#> # A tibble: 146 x 3
#> # Groups: variable [?]
#> variable value mean_mpg
#> <chr> <dbl> <dbl>
#> 1 am 0. 17.1
#> 2 am 1. 24.4
#> 3 carb 1. 25.3
#> 4 carb 2. 22.4
#> 5 carb 3. 16.3
#> 6 carb 4. 15.8
#> 7 carb 6. 19.7
#> 8 carb 8. 15.0
#> 9 cyl 4. 26.7
#> 10 cyl 6. 19.7
#> # ... with 136 more rows

请注意,虽然 mtcars 完全是数字,但如果您有不同的类型,转换为长格式将强制变量类型。计算将是相同的,但稍后可能会导致问题。要解决此问题,请使用可以处理不同类型的输出格式,例如

mpg_means_in_list_cols <- mtcars %>% 
as_tibble() %>% # compact printing for list columns
summarise_all(list) %>% # collapse each column into a list of itself
gather(group, group_values, -mpg) %>%
mutate(mpg_means = map2(mpg, group_values, # for each mpg/value pair, ...
~tibble(mpg = .x, group_value = .y) %>% # ...reconstruct a data frame...
group_by(group_value) %>%
summarise(mean_mpg = mean(mpg)))) # ...and aggregate

mpg_means_in_list_cols
#> # A tibble: 10 x 4
#> mpg group group_values mpg_means
#> <list> <chr> <list> <list>
#> 1 <dbl [32]> cyl <dbl [32]> <tibble [3 × 2]>
#> 2 <dbl [32]> disp <dbl [32]> <tibble [27 × 2]>
#> 3 <dbl [32]> hp <dbl [32]> <tibble [22 × 2]>
#> 4 <dbl [32]> drat <dbl [32]> <tibble [22 × 2]>
#> 5 <dbl [32]> wt <dbl [32]> <tibble [29 × 2]>
#> 6 <dbl [32]> qsec <dbl [32]> <tibble [30 × 2]>
#> 7 <dbl [32]> vs <dbl [32]> <tibble [2 × 2]>
#> 8 <dbl [32]> am <dbl [32]> <tibble [2 × 2]>
#> 9 <dbl [32]> gear <dbl [32]> <tibble [3 × 2]>
#> 10 <dbl [32]> carb <dbl [32]> <tibble [6 × 2]>

虽然这绝对不那么漂亮,但它能够整齐地容纳多种类型。要提取上面的结果,只需添加 %>% unnest(mpg_means)。按原样,分组变量均保存在 group_values 的列表元素中,并以聚合形式保存在每个 mpg_means 小标题的第一列中。

关于r - purrr 映射未生成整齐的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48711912/

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