我有一个字节列表,以及我希望转换为日期类的列列表。
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
This似乎相似,但我无法通过点击和列进行映射。
我是否需要使用purrr::map2
做一些聪明的事情?
答案 0 :(得分:4)
你是对的,你可以使用purrr::map2
,其中第一个参数将是你的元组列表,第二个参数是列名列表
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]])
}