【发布时间】:2020-04-29 10:06:58
【问题描述】:
我正在尝试编写一个脚本,该脚本自动将特定文件夹中的所有文件自动连接到一个 .txt 文件,但我遇到了问题,因为我试图在将它们写入 txt 之前将它们合并到一个大数据帧中文件,我收到错误,因为列名不匹配,所以我使用了 smartbind,但不是我收到“双行名称”的错误。
这是我的代码:
library(gtools)
dir<-"/Users/max/Desktop/NISAT_All/Regions"
subdir_list<-list.dirs(dir, recursive=F)
subdir_list<-list.dirs(subdir_list, recursive=F)
as.matrix(subdir_list)
subdirs_General <- subdir_list[ grepl("General", subdir_list) ]
as.matrix(subdirs_General)
subdir_list <- subdir_list[ !grepl("General", subdir_list) ]
subdir_list<-list.dirs(subdir_list, recursive=F)
as.matrix(subdir_list)
for (subdir in subdir_list){
setwd(subdir)
subdir <-list.files(subdir, recursive=T)
files <- subdir[ grepl("Armed Groups and Small Guns", subdir) ]
files <- c(files, subdir[ grepl("Arms Embargoes", subdir) ])
files <- c(files, subdir[ grepl("Black Market", subdir) ])
files <- c(files, subdir[ grepl("Brokering", subdir) ])
files <- c(files, subdir[ grepl("Landmines", subdir) ])
files <- c(files, subdir[ grepl("MANPADS", subdir) ])
files <- c(files, subdir[ grepl("Production", subdir) ])
files <- c(files, subdir[ grepl("Stockpile Security and Destruction", subdir) ])
files <- c(files, subdir[ grepl("UN Processes", subdir) ])
files <- c(files, subdir[ grepl("United Nations", subdir) ])
files <- c(files, subdir[ grepl("Weapons Collection and Amnesties", subdir) ])
dataframe <- data.frame()
for (file in files){
df_temp <- read.delim(file)
dataframe <- smartbind(dataframe, df_temp, sep="\n")
}
#then write your final file
write.table(dataframe,"MergedFiles.txt",sep="\n", row.names = F, eol = "\r")
rm(dataframe)
}
在图片上您可以看到文件通常的样子,我只是想将它们合并为一个
有人可以帮忙吗?
【问题讨论】:
-
请不要发布错误图片(以及代码/数据,虽然这里不是一个因素):它不能被复制或搜索(SEO),它会破坏屏幕阅读器,它可能不会非常适合某些移动设备。参考:meta.stackoverflow.com/a/285557/3358272(和xkcd.com/2116)。请直接包含代码或数据(例如,
dput(head(x))或data.frame(...))。 -
(1) 向
data.frame迭代地添加行符合逻辑,但它的性能会可怕地扩展:每次连接行时,它都会生成帧的完整副本,意味着第一个文件被复制n次(如果n文件被加载)。 (2) 合并数据时行名不能重复,如果行名有意义,建议每帧保存为帧本身的列,然后用rownames(x) <- NULL清除行名,然后执行连接。 -
你显示的文件是一个文本文件,你使用
read.delim而不是readLines有什么特殊原因吗? -
基本上,
read.delim用于读取表格数据,而不是文本文件。使用适当的函数(readLines,正如 r2evans 所写)。
标签: r concatenation