mutate_at 到目前为止跨越多个 tibbles
mutate_at to date across multiple tibbles
我有一个小标题列表,以及一个我希望转换为日期的列列表 class。
library(tibble)
library(purrr)
library(lubridate)
df1 <- tribble(~date_a, ~value_a,
"2017-1-3", 10,
"2018-2-7", 13,
"2018-5-7", 35)
df2 <- tribble(~date_b, ~value_b,
"2014-1-7", 10,
"2018-4-9", 6,
"2018-5-8", 18)
list_dfs <- list(df1, df2)
list_dates <- c("date_a", "date_b")
尝试使用 purrr:map
、dplyr:mutate_at
和 lubridate::ymd
有效地转换它们,但收到以下错误消息:
list_dfs %>% map(~mutate_at(.x, vars(list_dates), ymd))
Error: Strings must match column names. Unknown columns: date_b
看起来很相似,但我无法在 tibbles 和列上进行映射。
我需要用 purrr::map2
做点聪明的事吗?
你是对的,你可以使用 purrr::map2
,其中第一个参数是你的 tibbles 列表,第二个参数是列名列表
list_dfs <- list(df1, df2)
list_dates <- c("date_a", "date_b")
result <- map2(list_dfs, list_dates, ~ mutate_at(.x, .y, ymd))
result
# [[1]]
# # A tibble: 3 x 2
# date_a value_a
# <date> <dbl>
# 1 2017-01-03 10.
# 2 2018-02-07 13.
# 3 2018-05-07 35.
# [[2]]
# # A tibble: 3 x 2
# date_b value_b
# <date> <dbl>
# 1 2014-01-07 10.
# 2 2018-04-09 6.
# 3 2018-05-08 18.
for (i in seq_along(result)) {
assign(paste0("df", i), result[[i]])
}
我有一个小标题列表,以及一个我希望转换为日期的列列表 class。
library(tibble)
library(purrr)
library(lubridate)
df1 <- tribble(~date_a, ~value_a,
"2017-1-3", 10,
"2018-2-7", 13,
"2018-5-7", 35)
df2 <- tribble(~date_b, ~value_b,
"2014-1-7", 10,
"2018-4-9", 6,
"2018-5-8", 18)
list_dfs <- list(df1, df2)
list_dates <- c("date_a", "date_b")
尝试使用 purrr:map
、dplyr:mutate_at
和 lubridate::ymd
有效地转换它们,但收到以下错误消息:
list_dfs %>% map(~mutate_at(.x, vars(list_dates), ymd))
Error: Strings must match column names. Unknown columns: date_b
我需要用 purrr::map2
做点聪明的事吗?
你是对的,你可以使用 purrr::map2
,其中第一个参数是你的 tibbles 列表,第二个参数是列名列表
list_dfs <- list(df1, df2)
list_dates <- c("date_a", "date_b")
result <- map2(list_dfs, list_dates, ~ mutate_at(.x, .y, ymd))
result
# [[1]]
# # A tibble: 3 x 2
# date_a value_a
# <date> <dbl>
# 1 2017-01-03 10.
# 2 2018-02-07 13.
# 3 2018-05-07 35.
# [[2]]
# # A tibble: 3 x 2
# date_b value_b
# <date> <dbl>
# 1 2014-01-07 10.
# 2 2018-04-09 6.
# 3 2018-05-08 18.
for (i in seq_along(result)) {
assign(paste0("df", i), result[[i]])
}