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

如何将多个.txt文件读入R?,r,lapply,fread,read.table,readr,R,Lapply,Fread,Read.table,Readr,我使用R来可视化一些数据,所有这些数据都是.txt格式的。一个目录中有几百个文件,我想一次将它们全部加载到一个表中 有什么帮助吗 编辑: 列出这些文件不是问题。但我在从列表到内容的转换上遇到了困难。我尝试了来自的一些代码,但这部分有一个bug: all.the.data <- lapply( all.the.files, txt , header=TRUE) 任何能澄清这个问题的代码片段都将不胜感激 查看函数的帮助dir()akalist.files()。这允许您获得一个文件列表,可

我使用R来可视化一些数据,所有这些数据都是.txt格式的。一个目录中有几百个文件,我想一次将它们全部加载到一个表中

有什么帮助吗

编辑:

列出这些文件不是问题。但我在从列表到内容的转换上遇到了困难。我尝试了来自的一些代码,但这部分有一个bug:

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

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

查看函数的帮助
dir()
aka
list.files()
。这允许您获得一个文件列表,可能是通过正则表达式过滤的,您可以在其中循环

如果您想一次将它们全部删除,首先必须将内容保存在一个文件中。一个选项是使用
cat
将所有文件键入
stdout
并使用
popen()
读取。有关更多信息,请参见帮助(连接)。

您可以尝试以下方法:

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) 

谢谢你的回答

与此同时,我还自己黑客了一个方法。让我知道它是否有用:

library(foreign)

setwd("/path/to/directory")

files <-list.files()

data <- 0


for (f in files) {

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

data <- c(data,tempData)    

} 
库(外文)
setwd(“/path/to/directory”)

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

readtext::readtext("path_to/your_files/*.txt")
这真的很简单。

有两种快速读取多个文件并将其放入单个数据框或数据表的方法

首先获取所有txt文件的列表(包括子文件夹中的文件)

2)使用框架中的w/:

#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")
#install.packages("vroom", 
#                 dependencies = TRUE, repos = "https://cran.rstudio.com")
library(vroom)

# Read all the files and create a FileName column to store filenames
df <- vroom(list_of_files, .id = "FileName")
注意:要清理文件名,请使用
basename
gsub
函数

readr
vs
data.表
vs
vroom
大数据


编辑1:使用

文件列表%tools::文件路径\u sans\u ext())%>%
purrr::映射df(读取csv,
col_names=FALSE,
跳过=1,
.id=“文件名”)

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

谢谢,但仍不清楚。检查我的编辑:)问题是
txt
不是函数。您所指向的链接是关于
read.csv
函数的。稍微干净一点:
lappy(filelist,FUN=read.table,header=TRUE)
有没有使用这种方法添加文件名的方法?因此,每个数据帧的列标题都以文件名(一部分)开头?如何仅选择文件列表的前三个变量/列?如果使用
fread
:使用
select=c(1:3)
select=c(“colname 1”、“colname 2”、“colname 3”)
。如果使用
read\u table 2
,请检查参数
col\u types=cols\u only(colname1=“i”,colname2=“d”)
,其中
i
为整数,
d
为双精度。hths有关清理文件名的更多选项,请参阅我最近的回答。table
@BappaDas:您是否尝试了
map\u dfc()
?这是一个很好的函数,但是
readtext
只会将所有文本导入到一列中。在大多数情况下,这之后将需要额外的操作,以使数据可用。没错,这就是quanteda包的用途。
#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")
#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")
#install.packages("vroom", 
#                 dependencies = TRUE, repos = "https://cran.rstudio.com")
library(vroom)

# Read all the files and create a FileName column to store filenames
df <- vroom(list_of_files, .id = "FileName")
list_of_files <- list.files(path = ".", recursive = TRUE,
                            pattern = "\\.csv$", 
                            full.names = TRUE)

df <- list_of_files %>%
  purrr::set_names(nm = (basename(.) %>% tools::file_path_sans_ext())) %>%
  purrr::map_df(read_csv, 
                col_names = FALSE,
                skip = 1,
                .id = "FileName")