对于“加载许多文件并处理它们”,一个好的起点是https://stackoverflow.com/a/24376207/3358227。
缺少这些,让我们解决文件名/日期的问题。
首先,假设有你不想加载的文件(这一次),那么我们应该首先获取文件的名称。
files <- list.files("c:/Users/Desktop", pattern = "\\.xlsx$", full.names = TRUE)
### add a fake file without a date, for testing
files <- c(files, "Something.xlsx")
files
# [1] "C:/Users/Desktop/PC- 2021042500.xlsx"
# [2] "C:/Users/Desktop/PC- 2021042512.xlsx"
# [3] "C:/Users/Desktop/PC- 2021042600.xlsx"
# [4] "Something.xlsx"
现在我们可以通过解析文件名来确定Date 是什么。
files <- cbind(strcapture("\\b([0-9]{10})\\b", files, list(fn = "")), origfn = files)
files
# fn origfn
# 1 2021042500 C:/Users/Desktop/PC- 2021042500.xlsx
# 2 2021042512 C:/Users/Desktop/PC- 2021042512.xlsx
# 3 2021042600 C:/Users/Desktop/PC- 2021042600.xlsx
# 4 <NA> Something.xlsx
(strcapture 返回一个data.frame,为方便起见,我将其保留在那里。)
files$date <- as.Date(files$fn, format = "%Y%m%d%H")
files
# fn origfn date
# 1 2021042500 C:/Users/Desktop/PC- 2021042500.xlsx 2021-04-25
# 2 2021042512 C:/Users/Desktop/PC- 2021042512.xlsx 2021-04-25
# 3 2021042600 C:/Users/Desktop/PC- 2021042600.xlsx 2021-04-26
# 4 <NA> Something.xlsx <NA>
现在我们可以只过滤特定日期范围内需要的文件。
-
基础R:
dates <- as.Date(c("2021-04-20", "2021-04-25"))
loadthese <- subset(files, dates[1] <= date & date <= dates[2])
loadthese
# fn origfn date
# 1 2021042500 C:/Users/Desktop/PC- 2021042500.xlsx 2021-04-25
# 2 2021042512 C:/Users/Desktop/PC- 2021042512.xlsx 2021-04-25
list_of_frames <- lapply(loadthese$origfn, readxl::read_xlsx, sheet = "NEW")
punkty_pgd <- do.call(rbind, list_of_frames)
-
tidyverse
dates <- as.Date(c("2021-04-20", "2021-04-25"))
punkty_pgd <- files %>%
filter(between(date, dates[1], dates[2])) %>%
pull(origfn) %>%
map_dfr(~ read_xlsx(., sheet = "NEW"))