【问题标题】:How can I convert many XLSX files into many CSV files using NESTED FOR LOOPS in R?如何使用 R 中的 NESTED FOR LOOPS 将许多 XLSX 文件转换为许多 CSV 文件?
【发布时间】:2015-01-30 13:11:33
【问题描述】:

我一直在尝试将许多 .xlsx 转换为许多 .csv

首先,我列出了所有要转换的 .xlsx。

> especies
 [1] "Aburria jacutinga.xlsx"       "Acrobatornis fonsecai.xlsx"   "Alectrurus tricolor.xlsx"    
 [4] "Amadonatur lacernulatus.xlsx" "Amazona pretrei.xlsx"         "Amazona rhodocorytha.xlsx"   
 [7] "Amazona vinacea.xlsx"         "Anodorhynchus leari.xlsx"     "Anthus nattereri.xlsx"       
[10] "Antilophia bokermanni.xlsx"

然后,我编辑 elemmnts 以便名称中没有任何空格并创建另一个向量。就这样结束了:

> nomes_
 [1] "Aburria_jacutinga"       "Acrobatornis_fonsecai"   "Alectrurus_tricolor"     "Amadonatur_lacernulatus"
 [5] "Amazona_pretrei"         "Amazona_rhodocorytha"    "Amazona_vinacea"         "Anodorhynchus_leari"    
 [9] "Anthus_nattereri"        "Antilophia_bokermanni"  

然后我尝试了以下嵌套 for 循环将每个 .xlsx 文件转换为 .csv 文件:

for (file in especies){
  xlsx_objeto<- readWorksheetFromFile(file=file, sheet=1, keep=c(2,3,4,6,7,8,9,10,13,18))
  for( j in nomes_){
    write.csv(xlsx_objeto,file=paste0("./csv/",j,".csv"))
  }
}

我得到的是nomes_ 中每个元素的一个 .csv 文件。没关系。 但是里面的这些.csv 文件是完全一样的。它们都有来自especies 列表中最后一个 .xlsx 文件的数据。

【问题讨论】:

    标签: r loops csv nested xlsx


    【解决方案1】:

    最后,我可以做到这一点。这里是代码。抱歉,cmets 是葡萄牙语。

    library('XLConnect')
    library('foreach')
    # Cria uma lista com todos os arquivos em xlsx
    especies<-list.files(pattern = "\\.xlsx$")
    # Eliminar algum arquivo indesajado que esteja na pasta
    especies<-especies[-c(1:41)]
    ## Cria um vetor que contenha os nomes desejados para serem os nomes dos arquivos finais.
    # Retira a extensão ".xlsx"
    nomes<-gsub(pattern=".xlsx",replacement="",especies)
    # Substitui todo espaço por "_"
    nomes_<-gsub(pattern=" ",replacement="_",nomes)
    # Retira todo "." Atenção se quiser substituir pontos ".", estes devem estar entre colchetes assim: "[.]"
    nomes_<-gsub(pattern="[.]",replacement="",nomes_) 
    # Cria um csv com a lista dos nomes dos arquivos.(Opcional)
    write.csv(nomes_,file="./csv/_lista_especies.csv", quote=FALSE)
    ## Usando FOREACH LOOP para converter cada arquivo xlsx em um csv que terão como nome o elementos da lista criada acima.
    # Detalhes do uso do foreach em http://cran.r-project.org/web/packages/foreach/vignettes/foreach.pdf
    foreach(file = especies, j = nomes_) %do% {
      xlsx_objeto<- readWorksheetFromFile(file=file, sheet=1, keep=c(2,3,4,6,7,8,9,10,13,18))
      write.csv(xlsx_objeto,file=paste0("./csv/",j,".csv"))
    }
    

    【讨论】:

      猜你喜欢
      • 2018-10-03
      • 1970-01-01
      • 2022-01-09
      • 2020-05-05
      • 2020-11-23
      • 2018-08-02
      • 2020-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多