使用 purrr 中的 map 改变 tibble 列表中的列

Mutate columns within tibble list by using map in purrr

#pivot wider
> tb_chol3 <- tb_chol2 %>% pivot_wider(names_from = visit, values_from = value)
> tb_chol3
# A tibble: 2,800 x 7
   SUBJID  treatment treatment2 lipid_cat Baseline visit2 visit3
   <chr>   <chr>          <dbl> <chr>        <dbl>  <dbl>  <dbl>
 1 004-018 rosujet5           0 LDL             83     57     63
 2 004-018 rosujet5           0 HDL             61     66     73
 3 004-018 rosujet5           0 TG              99    154    165
 4 004-018 rosujet5           0 Total          164    154    169
 5 005-001 rosujet10          0 LDL             38     42     43
 6 005-001 rosujet10          0 HDL             43     30     33
 7 005-001 rosujet10          0 TG              95    150    104
 8 005-001 rosujet10          0 Total          100     99     97
 9 005-002 rosujet10          0 LDL            130     75     77
10 005-002 rosujet10          0 HDL             46     46     43
# ... with 2,790 more rows
> #nest by lipid cat
> chol_nested <- tb_chol3 %>% group_by(lipid_cat) %>% nest()
> chol_nested
# A tibble: 4 x 2
# Groups:   lipid_cat [4]
  lipid_cat data              
  <chr>     <list>            
1 LDL       <tibble [700 x 6]>
2 HDL       <tibble [700 x 6]>
3 TG        <tibble [700 x 6]>
4 Total     <tibble [700 x 6]>
> 

大家好。我想通过使用 map.

来改变 tibbles 列表中的列(在此示例中,tibbles 列表是 chol_nested$data)

我想看看(访问 2 和基线)和(访问 3 和基线)之间的区别

我是这样写代码的。但它不起作用。

#calculate diff using map
> chol_nested %>% map(data, ~ .x %>% mutate(visit2_diff = visit2 - Baseline, visit3_diff = visit3 - Baseline))

$lipid_cat
[1] ".x[[i]]"                                                                         
[2] "~.x %>% mutate(visit2_diff = visit2 - Baseline, visit3_diff = visit3 - Baseline)"

$data
[1] ".x[[i]]"                                                                         
[2] "~.x %>% mutate(visit2_diff = visit2 - Baseline, visit3_diff = visit3 - Baseline)"

Warning messages:
1: In .f(.x[[i]], ...) : data set ‘.x[[i]]’ not found
2: In .f(.x[[i]], ...) :
  data set ‘~.x %>% mutate(visit2_diff = visit2 - Baseline, visit3_diff = visit3 - Baseline)’ not found
3: In .f(.x[[i]], ...) : data set ‘.x[[i]]’ not found
4: In .f(.x[[i]], ...) :
  data set ‘~.x %>% mutate(visit2_diff = visit2 - Baseline, visit3_diff = visit3 - Baseline)’ not found
> 

期望的输出是

SUBJID  treatment treatment2 Baseline visit2 visit3   visit2_diff  visit3_diff
   <chr>   <chr>       <dbl>  <dbl>  <dbl>  <dbl>
 1 004-018 rosujet5           0   83     57     63
 2 004-018 rosujet5           0   61     66     73
 3 004-018 rosujet5           0   99    154    165
 4 004-018 rosujet5           0   164    154    169
 5 005-001 rosujet10          0   38     42     43
 6 005-001 rosujet10          0   43     30     33
 7 005-001 rosujet10          0   95    150    104
 8 005-001 rosujet10          0   100     99     97
 9 005-002 rosujet10          0   130     75     77
10 005-002 rosujet10          0   46     46     43

与上面相同的变量,所有 lipid_cat(LDL、HDL、TG、总计)。

我是 purrr 包的新手,但我真的会习惯它。

欢迎提出任何建议,非常感谢您的帮助!

谢谢!

如果您想在 chol_nested 的嵌套数据集中执行此操作,您可以执行以下操作:

library(dplyr)
library(purrr)

chol_nested %>% 
  mutate(data = map(data, ~ .x %>% mutate(visit2_diff = visit2 - Baseline, 
                                          visit3_diff = visit3 - Baseline)))

或者您可以在 tb_chol3 数据集本身上执行此操作。

library(dplyr)

tb_chol3 %>%
  mutate(visit2_diff = visit2 - Baseline, 
         visit3_diff = visit3 - Baseline)