如何使用R代码从4个文件夹中创建一个大的.csv文件,每个文件夹包含100个文件



如何使用R代码从4个文件夹中创建一个大的.csv文件,每个文件夹包含100个文件?4个文件夹中的单个文件不是.csv文件,而是普通文件。我不知道如何创建这个,也无法在网上找到任何答案,作为参考,我的大文件夹Newsgroups(D:/Newsgroups(包含4个文件夹(D:/NNewsgroups/1(。。。,(D:/新闻组/4(。在4个文件夹中的每个文件夹中,都有100个文件(D:/Newsgroups/1/100(。我最终的.csv文件的主要目标是创建一个单词包。

因此,这里尝试为您提供一个解决方案。我根据你的话对这些文件做了一些假设。

这部分代码为示例生成文件夹和文件。这些文件夹被称为A、B、C和D。在它们里面,每个文件夹都有100个文件。这些文件只是用一个数字命名的。在每个文件中,我随机添加了100个单词。

#-- This code will make the folders for the minimal, reproducible example
if(!require(OpenRepGrid)) install.packages(OpenRepGrid)
folders <- LETTERS[1:4]
for(folder in folders) {
dir.create(folder)
for (file in 1:100) {
words <- randomWords(100)
sentence <- paste(words, collapse = " ")
write.table(sentence, file = paste0(folder, "/", file), row.names = F, col.names = F, quote = F)
}
}

第二部分是读取文件的解决方案。在这里,我假设您希望将每个文件夹的文件放在一个单独的列中。这将2个循环简化为两个sapply循环。为了方便,我用了sapply而不是for。? sapply将为您提供更多关于其使用的示例。

#-- This code reads the files into a single table
folders2read <- c("A", "B", "C", "D")
table <- sapply(folders2read, function(folder) {
sapply(files2read, function(file) {
fpath <- paste0(folder, "/", file)
words <- read.table(fpath, stringsAsFactors = FALSE)
paste(words, collapse = " ")
})
})
write.csv(table, file = "all_words.csv")

如果你想要一列包含所有文件,你可以简单地这样做:

#-- Make a tidy table
if(!require(reshape2)) install.packages(reshape2)
table_tidy <- melt(table, varnames = c("file", "folder"), value.name = "text")
write.csv(table_tidy, file = "all_words_tidy.csv")

它将创建一个"整洁"的表,其中每个文本都在一行中,并且您有它来自的"文件夹"one_answers"文件"。

最新更新