簡體   English   中英

R讀入文件的最新版本

[英]R read in the latest version of a file

我目前正在讀取類似以下示例的文件,有沒有一種方法可以指定讀取文件的最新版本,即如果我將文件另存為“ Abroad v1.csv”,“ Abroad v2.csv”,我會想要它在這種情況下取​​最新的2。

year <- "2015"
species <- "HOM"

root <- "Y:/Pelagic Work/FIN Data"
file <- "Abroad.csv"
ABR <- file.path(root, year, species, file)

如果完全合理,最好通過file.info輸出中的數據來確定文件的“最新”版本( 此帖子 ,也由zx8754提出,是一個很好的答案)。

如果必須按文件名進行操作,請非常小心並了解操作系統如何對字符進行排序。 以這個例子為例。

files <- paste0("somepath/directory/filename v", 1:10, ".csv")

basenames <- basename(files)

sort(basenames)

 [1] "filename v1.csv"  "filename v10.csv" "filename v2.csv"  "filename v3.csv"  "filename v4.csv" 
 [6] "filename v5.csv"  "filename v6.csv"  "filename v7.csv"  "filename v8.csv"  "filename v9.csv"

如您所見, filename v10.csv' appears in the second position and would not be picked up by simple methods such at tail(basenames,1) filename v10.csv' appears in the second position and would not be picked up by simple methods such at 相反,您需要除去所有指定版本順序的字符,然后轉換為正確的格式,然后再排序。 這是一個如您所建議的如何使用整數版本執行此操作的示例。

Files <- data.frame(path = dirname(files),
                    file = basename(files),
                    stringsAsFactors = FALSE)
Files$v_number <- gsub("(^filename v|[.]csv$)", "", basenames)
Files$v_number <- as.numeric(Files$v_number)

Files <- Files[order(Files$v_number), , drop = FALSE]
tail(Files, 1)

但是,這很笨拙且容易出錯。 如果可能的話,建議您過渡到數據庫或版本控制,或同時過渡到兩者。

暫無
暫無

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

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