R:从多个文件夹中读取csv文件,然后编写一个xslx文件,保存工作表名称

R:从多个文件夹中读取csv文件,然后编写一个xslx文件,保存工作表名称,r,readxl,R,Readxl,目录的结构是: data->topic1->question1->sheetName.csv ->问题2->sheetName.csv ... ->主题2->问题1->sheetName.csv ->问题2->sheetName.csv ... 我希望每个“主题”的输出都有一个excel文件。在每个文件中,都有与该主题中的sheetName.csv对应的图纸。例如,一个名为:topic1.xlsx的excel文件,包含3个工作表,与主题1中的3个sheetName.csv文件相对应 但我也希望

目录的结构是:

data->topic1->question1->sheetName.csv
->问题2->sheetName.csv
...
->主题2->问题1->sheetName.csv
->问题2->sheetName.csv
...
我希望每个“主题”的输出都有一个excel文件。在每个文件中,都有与该主题中的sheetName.csv对应的图纸。例如,一个名为:topic1.xlsx的excel文件,包含3个工作表,与主题1中的3个sheetName.csv文件相对应

但我也希望保留原始.csv文件中的工作表名称。请注意,“sheetName”是随机的(即不遵循任何模式)

以下是我迄今为止尝试过的代码:

库(readxl)
图书馆(writexl)
图书馆(dplyr)

路径名确定首先,我将以编程方式生成反映您描述的目录结构的CSV文件。CSV将被命名为随机数字串

dir.create('data')
topics <- c("topic1", "topic2")
questions <- c("question1", "question2")

for(i in 1:length(topics)){
  dir.create(paste0('data/', topics[i]), showWarnings = F)
  for(j in 1:length(questions)){
    dir.create(paste0('data/', topics[i], "/", questions[j]), showWarnings = F)
    for(k in 1:3){
      set.seed(Sys.time())
      Sys.sleep(1)
      sheet <- as.character(round(runif(1, 1, 99999999)))
      print(sheet)
      file.name = paste0('data/', topics[i], "/", questions[j], "/", sheet, ".csv")
      write.csv(data.frame(x = 1), file = file.name)
    }
  }
}

不工作。My
data_lst
大约有50张csv表格,在原始文件中,它们已经命名。在保留原始名称的同时,有没有更简单的方法来写入数据?@dunguyen查看更新后的答案。将来,如果你像我在回答的第一部分中所做的那样,创建一个最小工作示例(MWE)——我编写的用于生成虚拟数据的代码,你将节省人们回答你问题的大量时间。我很抱歉。我将为进一步的问题创建MWE。谢谢@邓国恩不用担心。我只是告诉你,这样你将来有更好的机会得到一个好的答案!:)
library(xlsx)
library(dplyr)

pathName <- "data/"
topicName <- list.files(path = pathName)
for(i in 1:length(topicName)) {
  topicPath <- paste(pathName, topicName[[i]], sep = "")
  files_to_read = list.files(
    path = topicPath,
    pattern = '*.csv',
    recursive = TRUE,
    full.names = TRUE
  )
  data_lst <- list()
  for(k in 1:length(files_to_read)){
    sheet_name <- strsplit(strsplit(files_to_read[k], "/")[[1]][4], "\\.")[[1]][1]
    file_name <- paste0("data/", topicName[[i]], ".xlsx")
    dat <- read.csv(files_to_read[k])
    write.xlsx(dat, file=file_name, sheetName=sheet_name, row.names=F, append=T)
  }
}