【问题标题】:Mutate columns within tibble list by using map in purrr通过在 purrr 中使用 map 来改变 tibble 列表中的列
【发布时间】:2021-06-09 01:45:30
【问题描述】:
#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)。

我想看看(visit2 和基线)和(visit3 和基线)之间的区别

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

#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,Total) 相同的变量。

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

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

谢谢!

【问题讨论】:

    标签: r purrr dplyr


    【解决方案1】:

    如果您想在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)
    

    【讨论】:

    • 是的!有用!多谢!我只是想使用 map func 来看看它是如何工作的,虽然我可以用第二种方法:)
    • 如果您想了解更多关于mappurrr 包的信息,我建议您花点时间阅读Hadley WIckham 的R 4 Data ScienceAdvanced R! @눈웃음짓는붉은여우
    • @iamericfletcher 谢谢你的信息!
    猜你喜欢
    • 2021-08-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    相关资源
    最近更新 更多