r读取多个.dat文件
嗨,我是新来的,是R的初学者 我的问题是: 如果在R中有多个文件(test1.dat、test2.dat,…)要处理,我将使用此代码来读取它们r读取多个.dat文件,r,file,sqldf,R,File,Sqldf,嗨,我是新来的,是R的初学者 我的问题是: 如果在R中有多个文件(test1.dat、test2.dat,…)要处理,我将使用此代码来读取它们 filelist <- list.files(pattern = "*.dat") df_list <- lapply(filelist, function(x) read.table(x, header = FALSE, sep = "," ,c
filelist <- list.files(pattern = "*.dat")
df_list <- lapply(filelist, function(x) read.table(x, header = FALSE, sep = ","
,colClasses = "factor", comment.char = "",
col.names = "raw"))
filelist这似乎有效(但我认为有一种更快的sql
方法)
阅读:数据表
filelist <- list.files(pattern = "*.dat")
system.time(df_list <- lapply(filelist, fread))
# user system elapsed
# 5.244 0.200 5.457
不知怎么的,lappy()对我不起作用
map_df()在组合7000+个.dat文件时对我有效。还跳过了每个文件的第一行并筛选列“V1”
rawDATfile.list无法帮助使用sql,但您是否尝试了data.table
package中的fread
——提供了一些速度gains@user20650我会看一看,但现在我想你误解了我(所以我的问题不清楚)。这更像是一个如何编写正确的lappy
函数的问题……你的问题很好——我的评论太简短了。我刚刚提供了一种替代方法,允许您使用fistlappy
方法,但使用fread
而不是read.table
。它也可能比sqldf更快。请看mnel对这篇文章的回答。我已经用我的数据做了一些测试,fread
速度非常快,所以我还要感谢你用sql
sql.l <- lapply(filelist , file)
df_list2 <- lapply(sql.l, function(i) sqldf("select * from i" ,
dbname = tempfile(), file.format = list(header = TRUE, row.names = FALSE)))
library(data.table)
library(sqldf)
# test data
n=1e6
DT = data.table( a=sample(1:1000,n,replace=TRUE),
b=sample(1:1000,n,replace=TRUE),
c=rnorm(n),
d=sample(c("foo","bar","baz","qux","quux"),n,replace=TRUE),
e=rnorm(n),
f=sample(1:1000,n,replace=TRUE) )
# write 5 files out
lapply(1:5, function(i) write.table(DT,paste0("test", i, ".dat"),
sep=",",row.names=FALSE,quote=FALSE))
filelist <- list.files(pattern = "*.dat")
system.time(df_list <- lapply(filelist, fread))
# user system elapsed
# 5.244 0.200 5.457
sql.l <- lapply(filelist , file)
system.time(df_list2 <- lapply(sql.l, function(i) sqldf("select * from i" ,
dbname = tempfile(), file.format = list(header = TRUE, row.names = FALSE))))
# user system elapsed
# 35.594 1.432 37.357
all.equal(df_list , df_list2)
rawDATfile.list <- list.files(pattern="*.DAT")
data <- rawDATfile.list%>%
map_dfr(~read.delim(.x, header = FALSE, sep=";", skip=1, quote = "\"'")%>%
mutate_all(as.character))%>%
filter(V1=="B")