2017-08-11 90 views
0

我嘗試加入R中具有相同名稱的兩個目錄中存在的csv文件。 例如1.csv和2.csv存在於/ path/directory1和/ path/directory2中。 我加入了兩個文件(1.csv與1.csv)。如以下代碼所示:根據列名重命名CSV

directories <- c("/path/directory1", "/path/directory2") 
files <- lapply(directories, list.files, pattern="*.csv", full.names = TRUE) 
files <- lapply(files, sort) 
joined <- Map(function(x,y) { join(read.csv(x), read.csv(y), by=c("date")) }, 
      files[[1]], files[[2]]) 

現在,「加入」包含csv的列表。現在我想將所有csv的 存儲在目錄中(例如「path/directory3」),但csv名稱應該基於列 例如, 每個csv都包含有關每個國家/地區的信息。有「國家」欄目:價值觀是澳大利亞,新西蘭,印度,美國。

所以,CSV名稱應該是Australia.csv新Zealand.csv等。

請幫忙! 在此先感謝!

+0

我想你會更好的使用一些基於unix的解決方案,比如'awk'{print $ 0 >> $ 1.tsv}'',[docs here](https://www.gnu.org/software/呆子/手動/ html_node/Redirection.html)。 – liborm

+0

是的,但我想在R. – Kaushik

回答

0

你可以嘗試這樣的:

lapply(joined, function(x) write.csv(x, file = paste0(x[["country"]][1], ".csv"))) 

顯然,添加你感興趣的write.csv所需的相關參數。

要獲取文件名,我們在該列([1])只選擇「國家」一欄(x[["country"]]),然後選擇第一個值,因爲我們只需要一個值來創建一個文件名。

+0

謝謝!如果我們想從數據框列表中刪除相同的列,那麼還有一個查詢。然後把它寫到csv的。你能告訴這個嗎? – Kaushik

+0

@Kaushik,他們都有相同的名字?如果是這樣,而不是'write.csv(x,...)',你可以使用其中一種方法[在這個答案](https://stackoverflow.com/questions/4605206/drop-data-frame-columns在將其寫入csv文件之前將它們分配到'x'子集。 – A5C1D2H2I1M1N2O1R2T1

+0

非常感謝!!!! – Kaushik