2017-08-11 50 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