gpt4 book ai didi

r - 使用嵌套数据框访问 purrr::map() 中的分组变量

转载 作者:行者123 更新时间:2023-12-01 09:43:40 24 4
gpt4 key购买 nike

我正在使用 tidyr::nest()结合 purrr::map() (-family) 分组一个 data.frame分组,然后对每个子集做一些花哨的事情。考虑以下示例,以及 请忽略我不需要的事实 nest()map()这样做 (这是一个过于简单的例子):

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

mtcars %>%
group_by(cyl) %>%
nest() %>%
mutate(
wt_mean = map_dbl(data,~mean(.x$wt))
)

# A tibble: 8 x 4
cyl gear data cly2
<dbl> <dbl> <list> <dbl>
1 6 4 <tibble [4 x 9]> 6
2 4 4 <tibble [8 x 9]> 4
3 6 3 <tibble [2 x 9]> 6
4 8 3 <tibble [12 x 9]> 8
5 4 3 <tibble [1 x 9]> 4
6 4 5 <tibble [2 x 9]> 4
7 8 5 <tibble [2 x 9]> 8
8 6 5 <tibble [1 x 9]> 6

通常,当我执行此类操作时,我需要访问 cyl 内的分组变量(在本例中为 map())。 .但是这些分组变量显示为长度与嵌套数据帧中的行数相对应的向量,因此不容易借给自己。

有没有办法可以运行以下操作?我想要 wt 的平均值除以每组(即行)的柱面数 ( cyl)。
mtcars %>% 
group_by(cyl,gear) %>%
nest() %>%
mutate(
wt_mean = map_dbl(data,~mean(.x$wt)/cyl)
)


Error in mutate_impl(.data, dots) :
Evaluation error: Result 1 is not a length 1 atomic vector.

最佳答案

cyl出了map称呼:

mtcars %>% 
group_by(cyl,gear) %>%
nest() %>%
mutate(
wt_mean = map_dbl(data, ~mean(.x$wt)) / cyl
)

# A tibble: 8 x 4
cyl gear data wt_mean
<dbl> <dbl> <list> <dbl>
1 6 4 <tibble [4 x 9]> 0.516
2 4 4 <tibble [8 x 9]> 0.595
3 6 3 <tibble [2 x 9]> 0.556
4 8 3 <tibble [12 x 9]> 0.513
5 4 3 <tibble [1 x 9]> 0.616
6 4 5 <tibble [2 x 9]> 0.457
7 8 5 <tibble [2 x 9]> 0.421
8 6 5 <tibble [1 x 9]> 0.462
map_dblcyl作为长度为 8 的向量,因为 nestdata.frame 中删除组.使用 cylmap_*函数调用(如在 OP 的示例中)导致 8 个长度为 8 的向量。

2种其他方法:

两者的结果都与上面相同,但将分组变量保留在 map_* 中调用,根据 OP 的规范:

后重新分组 nest
mtcars %>% 
group_by(cyl,gear) %>%
nest() %>%
group_by(cyl, gear) %>%
mutate(wt_mean = map_dbl(data,~mean(.x$wt)/cyl))
map2用于迭代 cyl
mtcars %>% 
group_by(cyl,gear) %>%
nest() %>%
mutate(wt_mean = map2_dbl(data, cyl,~mean(.x$wt)/ .y))

关于r - 使用嵌套数据框访问 purrr::map() 中的分组变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53855897/

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