使用 lapply 从文件名的一部分将新列名添加到数据框列表
Add new column name to a list of data frames from a part of the file name using lapply
我在一个文件夹中有 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()
使用 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()
:
组合迭代和 row-binding 步骤
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+"))
我在一个文件夹中有 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()
使用 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+"))