【问题标题】:R - using purr add columns on dataframeR - 在数据框上使用 purr 添加列
【发布时间】:2020-05-17 12:33:50
【问题描述】:

我希望使用 purr 在我的数据集上创建一个年份变量并将它们连接在一起。这个例子将说明问题和我已经厌倦了。

# files in the directory 
files <- paste0("data/file_year_", 2015:2019, ".txt")

# map
files <- paste0("data_", 2013:2019, ".csv")
lst1 <-  files %>%
           map(~ read_csv(.x) %>%
             mutate(year = str_extract(., "\\d{4}")))

现在需要将该列表合并到一个数据框中。

dat1 <- bind_rows(lst1, .id = 'grp')

但是,当我尝试创建列表时出现以下错误:

Error in mutate_(.data, .dots = compat_as_lazy_dots(...)) : 
  argument ".data" is missing, with no default
In addition: Warning message:
In stri_extract_first_regex(string, pattern, opts_regex = opts(pattern)) :
  argument is not an atomic vector; coercing 

我尝试搜索此错误,但到目前为止没有任何帮助。任何帮助将不胜感激。

【问题讨论】:

  • 在您运行代码后,lst1 的每个元素是否实际上包含一个数据框?您将值分配给 files 两次。此外,每个版本的年份范围都不同。

标签: r tidyverse purrr


【解决方案1】:

我们可以使用map_df

library(tidyverse)
map_df(files,~read.csv(.x) %>% mutate(year = str_extract(.x, "\\d{4}")),.id = "grp")

【讨论】:

    【解决方案2】:

    您可以使用data.table 执行此循环 如果您愿意,还可以对每个文件执行特定操作。

    library(data.table)
    lapply(list.files(pattern= paste0("data/file_year_", 2015:2016, ".txt")),
           function(x){
      your_files = fread(x)
      #your_files = somecode
    })%>% rbindlist()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-22
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多