mutate_at на сегодняшний день через несколько tibbles - PullRequest
0 голосов
/ 22 мая 2018

У меня есть список столбцов и список столбцов, которые я хочу преобразовать в класс дат.

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?

1 Ответ

0 голосов
/ 22 мая 2018

Вы правы, вы можете использовать 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]])
}
...