如何使用 R 中的嵌套 FOR 循环将多个 XLSX 文件转换为多个 CSV 文件?
How can I convert many XLSX files into many CSV files using NESTED FOR LOOPS in R?
我一直在尝试将许多 .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"
然后,我编辑元素以便名称中没有任何 space 并创建另一个矢量。结局是这样的:
> 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 文件的数据。
我终于可以做到了。这是代码。对不起,评论是葡萄牙语。
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"))
}
我一直在尝试将许多 .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"
然后,我编辑元素以便名称中没有任何 space 并创建另一个矢量。结局是这样的:
> 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 文件的数据。
我终于可以做到了。这是代码。对不起,评论是葡萄牙语。
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"))
}