【问题标题】:Add new column name to a list of data frames from a part of the file name using lapply使用 lapply 从文件名的一部分将新列名添加到数据框列表中
【发布时间】:2022-11-11 17:12:13
【问题描述】:

我在一个文件夹中有 10 个 excel 文件,它们都有相同的列。最终结果是 bind_rows 并将它们全部组合起来。每个文件代表一周(在本例中为第 1-10 周)。我正在寻找如何在最终产品中添加一个名为“Week”的新列。每个文件名看起来像“...wk1.xlsx”、“...wk2.xlsx”等。我试图弄清楚如何检测“wk1”等并将其格式化为列表中的新列的数据帧。

这就是我所拥有的...

files <- list.files(path ="Users/Desktop/week", pattern = "*.xlsx", full.names= T) %>%
         lapply(read_excel, sheet =4, skip =39) %>%
         bind_rows()

【问题讨论】:

    标签: r dataframe lapply


    【解决方案1】:

    使用setNames() 命名文件名列表,然后使用bind_rows() 中的.id 参数,这会添加一个包含列表名称的列。

    library(tidyverse)
    library(readxl)
    
    files <- list.files(path ="Users/Desktop/week", pattern = "*.xlsx", full.names= T) %>%
      setNames(nm = .) %>% 
      lapply(read_excel, sheet =4, skip =39) %>%
      bind_rows(.id = "Week") %>%
      mutate(Week = str_extract(Week, "wk\d+"))
    

    您还可以使用 purrr::map_dfr() 组合迭代和行绑定步骤:

    files <- list.files(path ="Users/Desktop/week", pattern = "*.xlsx", full.names= T) %>%
      setNames(nm = .) %>% 
      map_dfr(read_excel, sheet = 4, skip = 39, .id = "Week") %>%
      mutate(Week = str_extract(Week, "wk\d+"))
    

    【讨论】:

    • 太感谢了。一切顺利!!
    猜你喜欢
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    相关资源
    最近更新 更多