1
votes
#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]>
> 

Hi, folks. I'd like to mutate columns within tibbles list(in this example tibbles list is chol_nested$data) by using map.

I want to see the differences between (visit2 and baseline) and (visit3 and baseline)

I write code like this. but it does not work.

#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
> 

Desired Output would be

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

same variables like above with all lipid_cat(LDL,HDL,TG,Total).

I am a newbie to purrr package, but I'd really to get used to it.

Any advises are welcome and I'd appreciate your help!

Thanks!

1

1 Answers

1
votes

If you want to do this in nested dataset in chol_nested you can do :

library(dplyr)
library(purrr)

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

Or you can do this on tb_chol3 dataset itself.

library(dplyr)

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