使用 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)
#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)