所有
我拼命想把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)
}