2010-08-03 47 views
13

我正在使用R可视化一些数据,所有这些数据都是.txt格式。目录中有几百个文件,我想一次性将它加载到一张表中。如何将多个.txt文件读入R?

任何帮助?

编辑:

列出文件不是问题。但是我从列表到内容都遇到了麻烦。我已经尝试了一些代码从here,但我得到一个错误与此部分:

all.the.data <- lapply(all.the.files, txt , header=TRUE) 

Error in match.fun(FUN) : object 'txt' not found 

的代码片段任何会澄清这个问题,将不胜感激。

+0

问题是'txt'不是函数。您指向的链接是关于'read.csv'函数的。感谢 – Wok 2010-08-03 17:56:58

回答

4

感谢所有的答案!

与此同时,我也自己砍了一种方法。让我知道,如果它是任何有用的:

library(foreign) 

setwd("/path/to/directory") 

files <-list.files() 

data <- 0 


for (f in files) { 

tempData = scan(f, what="character") 

data <- c(data,tempData)  

} 
4

看功能dir()又名list.files()的帮助。这可以让你得到一个文件列表,可能通过正则表达式过滤,你可以通过它循环。

如果您想一次全部使用它们,您首先必须在一个文件中包含内容。一种选择是使用cat键入所有文件到stdout并阅读使用popen()。有关更多信息,请参阅help(Connections)

+0

,但仍不清楚。检查我的编辑:) – 2010-08-03 15:23:54

+0

那么,创建'txt'。 – 2010-08-03 15:32:33

25

你可以试试这个:

filelist = list.files(pattern = ".*.txt") 

#assuming tab separated values with a header  
datalist = lapply(filelist, function(x)read.table(x, header=T)) 

#assuming the same header/columns for all files 
datafr = do.call("rbind", datalist) 
+0

稍微更清洁:'lapply(filelist,FUN = read.table,header = TRUE)' – RockScience 2015-04-16 09:10:53

2

有一个非常,非常简单的方法,现在做到这一点:READTEXT包。

readtext::readtext("path_to/your_files/*.txt") 

真的那么容易。

0

有两个快速的方法来读取多个文件,并把它们放在一个单独的数据帧或data.table

使用freaddata.table

# List all txt files including sub-folders 
    list_of_files <- list.files(path = ".", recursive = TRUE, 
          pattern = "\\.txt$", full.names = TRUE) 

    library(data.table) 

    # Read all the files and create a FileName column to store filenames 
    DT <- rbindlist(sapply(list_of_files, fread, simplify = FALSE), 
         use.names = TRUE, idcol = "FileName") 

使用purrr::map_dfreadr::read_table2tidyverse包:

library(tidyverse) 

    # Read all the files and create a FileName column to store filenames 
    df <- list_of_files %>% 
    set_names(.) %>% 
    map_df(read_table2, .id = "FileName") 

注意:要清理文件名,请使用basenamegsub函数