儘管大量的研究和使用lapply
(我認爲/希望這是正確的apply
函數)的幾個努力,我一直無法實現以下,並希望一些指導。我想要做的是讀取單個目錄中的所有文件,將它們全部合併到一個數據框中,確保每個文件在合併之前刪除前七行。如何將函數應用於特定目錄中的一組.csv文件?
(請注意,所有文件都包含相同的列標題,幷包含相同的數據類型。)
我已經試過這一點,但它顯然達不到的一切我想要實現:
files <- list.files(pattern = "*.csv") # Gather a list of everything in the directory that is a .csv file.
aconex <- lapply(files, fread) # Use lapply (I think this is correct) to apply the fread() function (from the data.table package) to each .csv file
這導致所有內容都存儲在向量中,而我希望輸出成爲數據幀。
必須有更好的方法 - 我似乎無法弄清楚。
任何人都可以提出更好的解決方案嗎?
UPDATE:
另外,我已經寫了for
環路部分達到我想要的東西;問題是,它不僅節省了數據的單個文件的價值,以數據幀(總共有15個文件):
for(x in list.files(pattern = "*.csv")){
df <- data.table::fread(x)
df <- df[-(1:7), ]
colnames(df) <- as.character(unlist(df[1,]))
df <- df[-(1), ]
}
一旦前七行已被刪除,我再申請的第一行作爲列名稱,然後刪除第一行。再一次,有什麼更好的方法來實現這一目標?
理想情況下,我想結果輸出到數據幀或者是X-數(df1
,df2
,..,dfX
),然後我可以合併的,但同樣,必須有一個更好的方式 - 是什麼是嗎?
簡而言之,我希望每個文件都被讀入自己的數據框中,然後將row 8
的值用作列標題,然後刪除前八行(我只保留第八行以便在刪除它之前將它用於列標題)。
取決於你想要做什麼...'list_files <-list.files(模式(list_files,fread,skip = 7,header = T) result_dataframe <-do.call(list_result,「cbind」)'或'list_files <-list.files(pattern =「* .csv」)list_result < 「* .csv」)list_result <-lapply(list_files,fread,skip = 7,header = T) result_dataframe <-rbindlist(list_results) – user3293236