尝试将包含.txt文件的文件夹转换为R中的一个.csv文件时出现错误消息



所有

我拼命想把29.677.txt文件转换成一个.csv文件,其中一列是文件名,一列是文本。但是,当在10.txt文件的样本大小上运行代码时,我得到以下错误消息:

data.frame中的错误(文件名=基本名称(myfiles(,全文=mytexts1行(:自变量意味着不同的行数:10110194

任何帮助都将不胜感激,因为我快疯了。。。

我试着运行以下函数来实现它:`

txt2csv <- function(my_dir, mycsvfilename) {
starting_dir <- getwd()
myfiles <- list.files(mydir, full.names = TRUE, pattern = "*.txt")
mytxts <- lapply(myfiles, readLines)
mytxts1lines <- unlist(mytxts)
mytxtsdf <- data.frame(filename = basename(myfiles),
fulltext = mytxts1lines)
setwd(mydir)
write.table(mytxtsdf, file = paste0(mycsvfilename, ".csv"), sep = ",", row.names = FALSE, col.names = FALSE, quote = FALSE)
message(paste0("newspapers_csv_file", paste0(newspapers_csv_file, ".csv"), "C:\Users\[...]", getwd()))
setwd(starting_dir)
}

`

当您说filename = basename(myfiles)时,您要求R创建一个名为filename的列,长度为length(myfiles),即10。然后,当您创建150194行的下一列时,R无法调和这两者。

您要做的是创建一个与mytxts长度相同的filename向量,并将其作为列名。我们可以使用rep()函数,使用lengths()函数来定义每个文件名的重复次数。

这里有一个可重复的例子:

mytxts  <- list(
letters[1:5],
letters[1:10],
letters[1:3]
)
myfiles  <- c("file1", "file2", "file3")
mytxts1lines <- unlist(mytxts)
myfiles1lines  <- rep(myfiles,lengths(mytxts))
data.frame(
filename = myfiles1lines,
fulltext = mytxts1lines
)
#    filename fulltext
# 1     file1        a
# 2     file1        b
# 3     file1        c
# 4     file1        d
# 5     file1        e
# 6     file2        a
# 7     file2        b
# 8     file2        c
# 9     file2        d
# 10    file2        e
# 11    file2        f
# 12    file2        g
# 13    file2        h
# 14    file2        i
# 15    file2        j
# 16    file3        a
# 17    file3        b
# 18    file3        c

在您的情况下,您希望rep()的参数为basename(myfiles)

txt2csv <- function(my_dir, mycsvfilename) {
starting_dir <- getwd()
myfiles <- list.files(mydir, full.names = TRUE, pattern = "*.txt")
mytxts <- lapply(myfiles, readLines)
mytxts1lines <- unlist(mytxts)
myfiles1lines  <- rep(basename(myfiles),lengths(mytxts)) # this line is new
mytxtsdf <- data.frame(filename = myfiles1lines, # this line is changed
fulltext = mytxts1lines)
setwd(mydir)
write.table(mytxtsdf, file = paste0(mycsvfilename, ".csv"), sep = ",", row.names = FALSE, col.names = FALSE, quote = FALSE)
message(paste0("newspapers_csv_file", paste0(newspapers_csv_file, ".csv"), "C:\Users\[...]", getwd()))
setwd(starting_dir)
}

最新更新