gpt4 book ai didi

r - 在 tibble 中的嵌套级别之间移动 : how to refer to data stored in upper levels of nesting hierarchy

转载 作者:行者123 更新时间:2023-12-05 01:05:44 27 4
gpt4 key购买 nike

我有一个 tibble,其中包含一个 list-column 数据框。在这个最小的例子中,这样的小标题只有 1 行:

library(tibble)

df_meta <-
tibble(my_base_number = 5,
my_data = list(mtcars))

df_meta
#> # A tibble: 1 x 2
#> my_base_number my_data
#> <dbl> <list>
#> 1 5 <df [32 x 11]>

我想修改 inside my_data 表并在其中更改一个新列。这是 mtcars 数据,我想改变一个新列,该列记录 mpg 列的日志。

虽然我可以这样做:

library(dplyr)
library(purrr)

df_meta %>%
mutate(my_data_with_log_col = map(.x = my_data, .f = ~ .x %>%
mutate(log_mpg = map(.x = mpg, .f = ~log(.x, base = 5)))
)
)
#> # A tibble: 1 x 3
#> my_base_number my_data my_data_with_log_col
#> <dbl> <list> <list>
#> 1 5 <df [32 x 11]> <df [32 x 12]>

我真正想要的是在内部 map() 内调用 log() 会将值传递给来自的 base 参数df_meta$my_base_number 而不是我示例中的硬编码 5

虽然在这个 1 行示例中这很简单:

df_meta %>%
mutate(my_data_with_log_col = map(.x = my_data, .f = ~ .x %>%
mutate(log_mpg = map(.x = mpg, .f = ~log(.x, base = df_meta$my_base_number)))
)
)

考虑一个更复杂的管道过程,它不再起作用:

tibble(my_data = rep(list(mtcars), 3)) %>%
add_column(base_number = 1:3) %>%
mutate(my_data_with_log_col = map(.x = my_data, .f = ~ .x %>%
mutate(log_mpg = map(.x = mpg, .f = ~log(.x, base = # <- ???
)))
)
)

所以我正在寻找的是一个过程,当我引用存储在“元表”每一行中的任何结构中的不同值时,它允许我在嵌套层次结构中上下“移动”。

现在,随着我对 map() 的深入研究,为了处理嵌套表,我无法引用存储的数据upper。如果您愿意,我正在寻找类似于使用终端导航时的 cd ../../.. 的东西。

最佳答案

这不完全是您所要求的答案。我想分享它作为一个选项!

你可以使用 unnestnest 的组合来旅行:

library(dplyr)
library(tidyr)

df_meta %>%
unnest(cols = c(my_data)) %>%
mutate(log_mpg = log(mpg, my_base_number)) %>%
nest(my_data=mpg:log_mpg)

变异后的输出:

  my_base_number   mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb log_mpg
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 5 21 6 160 110 3.9 2.62 16.5 0 1 4 4 1.89
2 5 21 6 160 110 3.9 2.88 17.0 0 1 4 4 1.89
3 5 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1 1.94
4 5 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1 1.90
5 5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2 1.82
6 5 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1 1.80
7 5 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4 1.65
8 5 24.4 4 147. 62 3.69 3.19 20 1 0 4 2 1.98
9 5 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2 1.94
10 5 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4 1.84

nest后的最终输出:

  my_base_number my_data           
<dbl> <list>
1 5 <tibble [32 × 12]>

关于r - 在 tibble 中的嵌套级别之间移动 : how to refer to data stored in upper levels of nesting hierarchy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70411813/

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