你如何将多个.txt文件读入R?

Eri*_*tto 23 r fread lapply read.table readr

我正在使用R来显示一些所有数据都是.txt格式的数据.目录中有几百个文件,我想一次性将它们全部加载到一个表中.

有帮助吗?

编辑:

列出文件不是问题.但是我无法从列表转到内容.我从这里尝试了一些代码,但是我得到了这个部分的错误:

all.the.data <- lapply( all.the.files,  txt  , header=TRUE)
Run Code Online (Sandbox Code Playgroud)

 Error in match.fun(FUN) : object 'txt' not found
Run Code Online (Sandbox Code Playgroud)

任何能够澄清这个问题的代码片段都将不胜感激.

Gre*_*reg 31

你可以试试这个:

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) 
Run Code Online (Sandbox Code Playgroud)

  • 稍微清洁:`lapply(filelist,FUN = read.table,header = TRUE)` (5认同)

Tun*_*ung 11

有两种快速方法可以读取多个文件并将它们放入单个数据框或data.table中

从包中使用fread()w /rbindlist()data.table

list_of_files <- list.files(path = ".", recursive = TRUE,
                            pattern = "\\.txt$", 
                            full.names = TRUE)
Run Code Online (Sandbox Code Playgroud)

使用readr::read_table2()purrr::map_df()tidyverse包中使用:

#install.packages("data.table", repos = "https://cran.rstudio.com")
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")
Run Code Online (Sandbox Code Playgroud)

注意:清理文件名,使用basenamegsub功能


编辑1:读取多个csv文件并跳过header

#install.packages("tidyverse", 
#                 dependencies = TRUE, repos = "https://cran.rstudio.com")
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")
Run Code Online (Sandbox Code Playgroud)

编辑2:将包含通配符的模式转换为等效的正则表达式,使用readr::read_csv


Ken*_*oit 9

现在有一种非常非常简单的方法可以做到这一点: readtext包。

readtext::readtext("path_to/your_files/*.txt")
Run Code Online (Sandbox Code Playgroud)

它真的很容易。


Dir*_*tel 5

看看帮助功能dir()亦称list.files().这允许您获取可能通过正则表达式过滤的文件列表,您可以在其上循环.

如果您想要同时使用它们,首先必须将内容放在一个文件中.一种选择是使用cat输入所有文件stdout并使用它来读取popen().了解help(Connections)更多.


Eri*_*tto 5

感谢所有的答案!

同时我也自己黑了一个方法。让我知道它是否有用:

library(foreign)

setwd("/path/to/directory")

files <-list.files()

data <- 0


for (f in files) {

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

data <- c(data,tempData)    

} 
Run Code Online (Sandbox Code Playgroud)