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