簡體   English   中英

如何使用部分文件名將 CSV 文件讀入 R?

[英]How to read a CSV file into R using partial file name?

我有一個程序可以將數據輸出到 CSV 文件(名稱中標有日期和時間,即 CSVFileName_2021-01-30 12:00:00.csv),然后需要將這些 CSV 文件讀入我的下一個程序。 如何在忽略日期/時間的情況下僅使用固定文件名讀取它們? 理想情況下,它總是會選擇具有最新時間戳的文件,因為用戶可能在一天內多次運行該程序,因此有多個文件具有相同的部分名稱但不同的時間或日期。

任何建議將不勝感激!

您可以使用list.files獲取與該名稱模式匹配的所有文件,對它們進行排序(好吧,它們返回時已經按字母順序排序),然后選擇最新的。 像這樣的東西:

most_recent = function(...) {
 tail(list.files(...), 1)
}

read.csv(most_recent(pattern = "CSVFileName"))

如果您有不同的用戶生成了不同的文件名,您可以執行類似的操作來獲取所有用戶的最新文件

library(tidyverse)

files <- c("CSVFileName1_2021-01-30 12:00:00.csv", "CSVFileName1_2021-01-30 11:00:00.csv",
           "CSVFileName1_2021-01-30 10:00:00.csv", "CSVFileName2_2021-01-30 12:00:00.csv",
           "CSVFileName2_2021-01-30 10:00:00.csv", "CSVFileName2_2021-01-30 09:00:00.csv",
           "CSVFileName2_2021-01-30 12:00:00.csv", "CSVFileName3_2021-01-30 11:00:00.csv", 
           "CSVFileName3_2021-01-30 12:00:00.csv", "CSVFileName4_2021-01-30 12:00:00.csv")

files %>% 
  enframe(name = NULL) %>% 
  mutate(file = value) %>% 
  separate(value, into = c("name", "time"), sep = c("_")) %>% 
  mutate(time = time %>% str_remove(".csv") %>% lubridate::as_datetime()) %>% 
  group_by(name) %>% 
  arrange(desc(time)) %>% 
  slice(1) %>% 
  pull(file)
#> [1] "CSVFileName1_2021-01-30 12:00:00.csv"
#> [2] "CSVFileName2_2021-01-30 12:00:00.csv"
#> [3] "CSVFileName3_2021-01-30 12:00:00.csv"
#> [4] "CSVFileName4_2021-01-30 12:00:00.csv"

reprex package (v0.3.0) 於 2021 年 2 月 2 日創建

M.耶茨,

下面是一些代碼,它將使用glob2rx function 在工作目錄中找到與定義的模式(例如“my_file*.csv”)匹配的所有 csv 文件,然后根據該文件的“最后修改”讀取最新的 csv 文件' 時間。

# Load library
library('tidyverse')

# Locate files in working directory
files <- data.frame('files'=dir(pattern = glob2rx("my_file*.csv")), 
                   stringsAsFactors = FALSE)
files$modified_time <- file.mtime(files$files)

# Arrange the 'files' dataframe by the 'modified_time' column in descending order
files <- files %>% arrange(desc(modified_time))

# Read in the latest file which will be in the first row of the 'files' dataframe
my_df <- read_csv(file=files$file[1])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM