将列添加到 r 中的列表列的有效方法
Efficient method to add a column to a listcolumn in r
如何在列表列中创建新列?我只能通过变异成一个新的列表列来做到这一点。
此外,我发现与其他方法相比,下面的双重突变非常慢。 mutate 会增加很多开销吗?
library(repurrrsive)
library(tidyverse)
#> ── Attaching packages ─────────────────────────────────────────────────────────────────────────── tidyverse 1.2.1 ──
#> ✔ ggplot2 2.2.1 ✔ purrr 0.2.4
#> ✔ tibble 1.4.2 ✔ dplyr 0.7.4
#> ✔ tidyr 0.8.0 ✔ stringr 1.3.0
#> ✔ readr 1.1.1 ✔ forcats 0.3.0
#> ── Conflicts ────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
#> ✖ dplyr::filter() masks stats::filter()
#> ✖ dplyr::lag() masks stats::lag()
system.time(rep(
gap_m<-gap_nested %>%
mutate(new_list=
map(data,~ .x %>% mutate(pop_str=str_sub(pop,end = 4))))))
#> user system elapsed
#> 0.087 0.005 0.091
system.time(gap_c<-gap_nested %>%
mutate(new_list=
map(data,~ cbind(.x,pop_str=str_sub(.x$pop,end=4),stringsAsFactors=F))))
#> user system elapsed
#> 0.017 0.000 0.017
system.time(gap_b<-gap_nested %>%
mutate(new_list=
map(data,~ bind_cols(.x,pop_str=str_sub(.x$pop,end=4)))))
#> user system elapsed
#> 0.02 0.00 0.02
做你所做的,但将结果保存回 data
:
mutate(.df, data = map(data, .f))
如何在列表列中创建新列?我只能通过变异成一个新的列表列来做到这一点。
此外,我发现与其他方法相比,下面的双重突变非常慢。 mutate 会增加很多开销吗?
library(repurrrsive)
library(tidyverse)
#> ── Attaching packages ─────────────────────────────────────────────────────────────────────────── tidyverse 1.2.1 ──
#> ✔ ggplot2 2.2.1 ✔ purrr 0.2.4
#> ✔ tibble 1.4.2 ✔ dplyr 0.7.4
#> ✔ tidyr 0.8.0 ✔ stringr 1.3.0
#> ✔ readr 1.1.1 ✔ forcats 0.3.0
#> ── Conflicts ────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
#> ✖ dplyr::filter() masks stats::filter()
#> ✖ dplyr::lag() masks stats::lag()
system.time(rep(
gap_m<-gap_nested %>%
mutate(new_list=
map(data,~ .x %>% mutate(pop_str=str_sub(pop,end = 4))))))
#> user system elapsed
#> 0.087 0.005 0.091
system.time(gap_c<-gap_nested %>%
mutate(new_list=
map(data,~ cbind(.x,pop_str=str_sub(.x$pop,end=4),stringsAsFactors=F))))
#> user system elapsed
#> 0.017 0.000 0.017
system.time(gap_b<-gap_nested %>%
mutate(new_list=
map(data,~ bind_cols(.x,pop_str=str_sub(.x$pop,end=4)))))
#> user system elapsed
#> 0.02 0.00 0.02
做你所做的,但将结果保存回 data
:
mutate(.df, data = map(data, .f))