将文件夹中的单独df转换为r中的单个df

将文件夹中的单独df转换为r中的单个df,r,dataframe,R,Dataframe,我有一个文件夹,里面有几个tsv格式的数据帧文件(df1.txt、df2.txt、df3.txt…等等)。我需要提取每个df中两列的数据(“freq”、“cdr”),并将它们聚合到一个带有两列的大型tsv数据帧中,再加上第三列,表示它们来自的文件名(“file”、“cdr”、“freq”) 我尝试使用“list.files”,但这只会得到一个文件名列表。我曾想过使用“parse”,但我不确定这个函数是如何工作的。作为一个新手,我非常感谢你的帮助 data.all <- list.files

我有一个文件夹,里面有几个tsv格式的数据帧文件(df1.txt、df2.txt、df3.txt…等等)。我需要提取每个df中两列的数据(“freq”、“cdr”),并将它们聚合到一个带有两列的大型tsv数据帧中,再加上第三列,表示它们来自的文件名(“file”、“cdr”、“freq”)

我尝试使用“list.files”,但这只会得到一个文件名列表。我曾想过使用“parse”,但我不确定这个函数是如何工作的。作为一个新手,我非常感谢你的帮助

data.all <- list.files("/mnt/data/OUTPUT/", pattern="*.txt", full.names = TRUE)
sdata <- data.all[, "file", "freq", "cdr"

data.all如何使用tidyverse软件包:

library(tidyverse)

#Lists contents of directory (data_dir) that satisfy regexp (end in .txt)
data_dir <- "your/directory"
your_df <- fs::dir_ls(data_dir, regexp = "\\.txt$")

#Maps read_delim across contents of data_dir list
your_df <- your_df %>% 
  map_dfr(read_delim, "\t", escape_double = FALSE, trim_ws = TRUE, .id = "source") %>%
mutate(source = str_replace(basename(source), ".txt", ""))

#selects your desired columns
your_df <- your_df %>%
select(freq, cdr, "file" = source)
库(tidyverse)
#列出满足regexp(以.txt结尾)的目录(data_dir)的内容
data_dir与另一个类似,我只需为
循环使用一个

data.all <- list.files("/mnt/data/OUTPUT/", pattern="*.txt", full.names = FALSE)
dat_tsv <- data.frame()

for(i in data.all){
   dat <- read.delim(paste0("/mnt/data/OUTPUT/",i),stringASfactor=FALSE)
   dat <- dat[,c("freq","cdr")]
   dat$file <- gsub(".txt","",i)
   dat_tsv <- rbind(dat_tsv,dat)
}

data.all让我试试看。我没有想到那些图书馆。格雷格,除了一个小细节,它工作得很好。“文件”列列出了源的整个目录路径。有没有一种方法可以将其修剪为只显示实际的源文件名?是的,这是可能的。请参阅上面添加的对
mutate
的调用,使用
basename
您添加的最后一段代码完成了这项任务。非常感谢。还有一件事,我如何删除“.txt”扩展名并只列出文件名?fra,我认为dat中有问题。我的错,文件不在工作目录中
paste0(“/mnt/data/OUTPUT/”,i)
应该指向正确的路径
data.all <- list.files("/mnt/data/OUTPUT/", pattern="*.txt", full.names = FALSE)
dat_tsv <- data.frame()

for(i in data.all){
   dat <- read.delim(paste0("/mnt/data/OUTPUT/",i),stringASfactor=FALSE)
   dat <- dat[,c("freq","cdr")]
   dat$file <- gsub(".txt","",i)
   dat_tsv <- rbind(dat_tsv,dat)
}