似乎我有一个非常基本的问题,但是我对R真的很陌生,只是无法使其与我所找到的信息配合使用,所以我希望有人可以帮助我。
我在一个文件夹中有许多.txt文件,每个文件都包含一个主题的数据。这些文件具有相同的列,但是每个文件的行数有所不同。此外,列标题仅从第9行开始。我要做的是 1)一口气将.txt文件导入RStudio,同时跳过前8行,并且 2)通过它们的列将它们全部合并到一个数据帧中,以便最终的数据帧是一个数据集,其中包含来自所有主题的长格式数据。
我设法使用easycsv软件包和以下代码完成了1次操作:
fread_folder(directory = "C:/Users/path/to/my/files",
extension = "TXT",
sep = "auto",
nrows = -1L,
header = "auto",
na.strings = "NA",
stringsAsFactors = FALSE,
verbose=getOption("datatable.verbose"),
skip = 8L,
drop = NULL,
colClasses = NULL,
integer64=getOption("datatable.integer64"),# default:"integer64"
dec = if (sep!=".") "." else ",",
check.names = FALSE,
encoding = "unknown",
quote = "\"",
strip.white = TRUE,
fill = FALSE,
blank.lines.skip = FALSE,
key = NULL,
Names=NULL,
prefix=NULL,
showProgress = interactive(),
data.table=FALSE
)
那行得通,但是现在我的问题是数据帧是根据我的文件的很长路径命名的,而显然是根据txt文件命名的(虽然没有7)。因此它们非常长且笨拙,并且包含了可能不应该包含的字符,例如空格。因此,现在我很难将数据帧合并为一个,因为我不知道除了已赋予它们的默认名称,如何重命名它们或如何指定之外,还如何引用这些数据帧。首先导入数据框时应如何命名。
如果有人可以帮助我解决这个问题,我将非常感激!
谢谢!
答案 0 :(得分:1)
下面的代码查找目录中包含哪些文件,使用这些名称将获取文件作为变量,然后使用 rbindlist 将表合并为一个单桌。希望能有所帮助。假定目录中的每个.csv或.txt文件都作为单独的data.table被拉入当前环境。
for (x in (list.files(directory))) {
# Remove the .txt extension from the filename to get the table name
if (grepl(".txt",x)) {
x = gsub(".txt","",x)
}
thisTable <- get(x) # use "get" to pull in the string as a variable
# now just combined into a single dataframe
if (exists("combined")) {
combined = rbindlist(list(combined,thisTable))
} else {
combined <- thisTable
}
}
答案 1 :(得分:0)
以下内容应该可以正常工作。但是,如果没有示例数据或更清晰地描述您想要的东西,很难确定这是否是您想要实现的目标。
#set working directory
setwd("C:/Users/path/to/my/files")
#read in all .txt files but skip the first 8 rows
Data.in <- lapply(list.files(pattern = "\\.txt$"),read.csv,header=T,skip=8)
#combines all of the tables by column into one
Data.in <- do.call(rbind,Data.in)