【问题标题】:Dynamically join multiple datasets in a dplyr/purrr workflow在 dplyr/purrr 工作流程中动态连接多个数据集
【发布时间】:2020-02-12 15:34:44
【问题描述】:

我有两个包含多个数据框的两个不同年份的列表:

df_18 <- results_2018[[1]] %>%
        select(Answers, Austria)

df_19 <- results_2019[[1]] %>%
    select(Answers, Austria)

它们看起来很相似,像这样:

structure(list(Answers = c("45 to 54", "25 to 34", "35 to 44", 
"55 to 64", "16 to 24"), Austria = c(23.3, 21.5, 20.8, 15.6, 
18.8)), row.names = c(NA, -5L), class = "data.frame")

structure(list(Answers = c("45 to 54", "35 to 44", "25 to 34", 
"16 to 24", "55 to 64"), Austria = c(23.4, 20.7, 21.4, 18.7, 
15.8)), row.names = c(NA, -5L), class = "data.frame")

我需要对两个列表中的每个元素的“答案”类别进行完全连接。

它应该看起来像这样,但是对于列表中的每个数据集,结果也应该是一个数据框列表。

这是我每年的一个元素的代码:

dplyr::full_join(df_18, df_19, by="Answers") %>%
    mutate(Difference = Austria.y - Austria.x) %>%
    rename_at(vars(contains(".x")), ~str_replace(.x, ".x", "_2018")) %>%
    rename_at(vars(contains(".y")), ~str_replace(.x, ".y", "_2019")) %>%
    set_names(c("Answers", "Austria_2018", "Austria_2019", "Difference"))

谁能帮我实现这个目标?

谢谢你:)

【问题讨论】:

  • 是的,每个元素都有相同的列。在这种情况下,总是对一个奥地利进行年份比较:)

标签: r dplyr purrr


【解决方案1】:

如果我们对两个lists 的对应元素执行此操作,请使用map2

library(purrr)
library(dplyr)
library(stringr)
map2(results_2018, results_2019, ~ 
              full_join(.x %>% select(Answers, Austria),
                                 .y %>% select(Answers, Austria),
                         by = "Answers") %>%
                mutate(Difference = Austria.y - Austria.x) %>%
               rename_at(vars(contains(".x")),
                      ~str_replace(., ".x", "_2018")) %>%
               rename_at(vars(contains(".y")),
                     ~str_replace(., ".y", "_2019")) %>%
               set_names(c("Answers", "Austria_2018", "Austria_2019", "Difference")))

【讨论】:

  • 你在编辑之前发布的代码,这个给我Error in is_closure(x) : object 'Answers' not found
  • @DataMastery 对不起,我的错误。我在想select,没看到set_names
  • 谢谢,现在完美运行。你想出这个解决方案的速度有多快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
  • 2018-12-07
相关资源
最近更新 更多