我在作業目錄中有許多 csv 檔案。其中一些檔案在其名稱的開頭共享一個字串(例如 ny、nj 等)。下面是一個螢屏截圖:

我想要做的是匯入和合并共享字串的 csv 檔案。我搜索并看到有人建議使用正則運算式,但是我不確定這是否是最好的方法。我很感激這方面的任何幫助。
最好的,卡維
uj5u.com熱心網友回復:
這是一個可能比for回圈更有效的函式,盡管可能有更優雅的解決方案。
由于我不知道您的 excel 檔案包含什么,我創建了幾個包含幾列(“A”、“B”和“C”)的虛擬檔案。我不知道你會通過什么合并;在這個例子中,我按列“A”合并。
鑒于檔案中的歧義,我已將其編輯為包括合并和系結方法,具體取決于需要的內容。
要測驗這些函式,請在檔案夾中創建幾個 CSV 檔案(我創建了 NJ_1.csv、NJ_2.csv、NJ_3.csv、NY_1.csv、NY_2.csv,每個檔案都有 A、B 和 C 列。)
對于所有選項,都需要運行此代碼。
setwd("insert path where folder with csv files is located")
library(dplyr)
選項1:
如果要合并包含具有唯一識別符號的不同資料的檔案。 示例:一個檔案包含溫度,一個檔案包含給定地理位置的降水
importMerge <- function(x, mergeby){
temp <- list.files(pattern = paste0("*",x))
files <- lapply(temp, read.csv)
merge <- files %>% Reduce(function(dtf1, dtf2) left_join(dtf1, dtf2, by = mergeby), .)
return(merge)
}
NJmerge <- importMerge("NJ", "A")
NYmerge <- importMerge("NY", "A")
選項 2:
如果要系結包含相同列的檔案。 示例:檔案包含溫度和降水,每個檔案是一個給定的地理位置。注意:每個檔案中的所有列都需要同名
importBind <- function(x){
temp <- list.files(pattern = paste0("*",x))
files <- lapply(temp, read.csv)
bind <- do.call("rbind", files)
return(bind)
}
NJbind <- importBind("NJ")
NYbind <- importBind("NY")
選項 3
如果您只想系結包含相同列名的檔案中的某些列
示例:檔案包含溫度和降水,以及其他不需要的列,并且每個檔案都是給定的地理位置。注意:每個檔案中的所有列都需要具有相同的名稱。由于 default 是NULL,keeps省略將默認為上述選項 2。
importBindKeep <- function(x, keeps = NULL){ # default is to keep all columns
temp <- list.files(pattern = paste0("*",x))
files <- lapply(temp, read.csv)
# if you wanted to only keep a few columns, use the following.
if(!is.null(keeps)) files <- lapply(files, "[", , keeps)
bind <- do.call("rbind", files)
return(bind)
}
NJbind.keeps <- importBindKeep("NJ", keeps = c("A","B")) # keep only columns A and B
NYbind.keeps <- importBindKeep("NY", keeps = c("A","B"))
請參閱如何一次匯入多個 .csv 檔案?并同時將多個 data.frames 合并到一個串列中,以獲取更多資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/400256.html
上一篇:csv模塊不寫新行
