如何在 r 中加载和合并多个 .csv 文件?
Posted
技术标签:
【中文标题】如何在 r 中加载和合并多个 .csv 文件?【英文标题】:How to load and merge multiple .csv files in r? 【发布时间】:2017-10-07 02:14:53 【问题描述】:所以我是 R 的新手,现在我正在尝试加载多个 .csv 文件(约 60 个),然后将它们合并在一起。它们都有相似的列,它们的文件命名如下:dem_file_30, dem_file_31。
我一直在尝试使用在线脚本,但总是遇到一些错误。我确信我可以手动完成,但这真的很乏味。
例子:
file_list <- list.files("/home/sjclark/demographics/")
list_of_files <- lapply(file_list, read.csv)
m1 <- merge_all(list_of_files, all=TRUE)
Error: merge_all doesn't exist
这似乎将它们读入R,但是在那之后我不知道该怎么办...帮助?
setwd("/home/sjclark/demographics/")
filenames <- list.files(full.names=TRUE)
All <- lapply(filenames,function(i)
read.csv(i, header=TRUE)
)
【问题讨论】:
merge_all 可能不是基础 R 中的函数。它来自哪里? 是来自 reshape 包吗?如果是这样,请安装并加载包。 因为它已在 cmets 中被指出,也许您不想 merge(在 R 中它是 SQL 等效的 join)但是concatenate 或append 文件,对吗?如果是这样,请编辑您的问题,因为它将对后代有用:) 【参考方案1】:我刚刚做了一个非常相似的任务,并且想知道是否有更快/更好的方法来使用dplyr
和bind_rows
。
我的这个任务的代码是使用来自plyr
的ldply
:
library(plyr)
filenames <- list.files(path = "mypath", pattern = "*", full.names=TRUE)
import.list <- ldply(filenames, read.csv)
希望有帮助
罗里
【讨论】:
所以 OP 需要 append 不合并?语义非常重要。 @JulietR 如果您对这个答案感到满意,请您接受/投赞成票 是的!投了赞成票,但由于我对这个网站很陌生,它可能不会公开显示。【参考方案2】:看来您可能正在尝试使用 R-bloggers (credit to Tony Cookson) 上共享的 nice 功能:
multMerge = function(mypath)
filenames = list.files(path = mypath, full.names = TRUE)
datalist = lapply(filenames,
function(x)read.csv(file = x,
header = TRUE,
stringsAsFactors = FALSE))
Reduce(function(x,y) merge(x, y, all = TRUE), datalist)
或者也许你已经从不同的来源拼凑起来?无论如何,merge
是您缺少的关键基本 R 函数。 merge_all
不存在于任何包中。
由于您是 R 新手(也许是所有编程新手),因此值得注意的是,您需要在使用它之前定义该函数。完成后,您可以像调用任何其他函数一样调用它:
my_data <- multMerge("/home/sjclark/demographics/")
【讨论】:
当我用“merge”而不是“merge all”插入它时,我得到这个:as.data.frame(y) 中的错误:缺少参数“y”,没有默认值跨度> 正如博文所解释的,merge
一次只对两个对象进行操作。我刚刚分享的函数通过使用另一个名为 Reduce
的函数来迭代地对您的数据列表应用合并来解决这个问题。我认为没有比这里介绍的功能更简洁的方式来完成这项任务了。以上是关于如何在 r 中加载和合并多个 .csv 文件?的主要内容,如果未能解决你的问题,请参考以下文章