j'aimerais supprimer des colonnes qui apparaissent en trop dans certains de mes fichiers dans un dossier "TESTin" et ensuite écrire les fichiers propres dans un fichier "TESTout". J'ai beaucoup de fichiers et il y a des erreurs dans certains mais pas dans d'autres, donc le but est de faire cela automatiquement. Ensuite je bind ces fichiers par noms de colonnes.
Je m'explique:
dans mon exemple, j'ai 2 fichiers que je veux réunir nommés "ww97_test_40_z1.xlsx" et ""ww97_test2_40_z1.xlsx".
Pour réunir ces 2 fichiers par noms de colonnes identiques, j'ai un code qui fonctionne mais seulement si les colonnes ont des noms identiques donc ici j'ai un souci:
Code : Tout sélectionner
df_base <- read_excel(listZ1Y97[1])
df_base <- mutate_all(df_base, as.character)
for (i in c(2:length(listZ1Y97))) {
df_join <- read_excel(listZ1Y97[i])
df_join <- mutate_all(df_join, as.character)
df_base <- rbind(df_base,df_join)
}
df_base
View(df_base)
write.csv2(df_base, "D:\\FinalDataModel20210820\\TESTout.csv")
Avant de faire tourner ce code, j'aimerais donc supprimer automatiquement pour tous les fichiers de la liste dessous les colonnes "colToDelete1" et "colToDelete2" lorsqu'elles sont présentes (par exemple ici dans ww97_test_40_z1.xlsx).
Ensuite j'ai un autre problème, dans certains fichiers j'ai des colonnes avec les noms correctes: "HauteurPLante", "HauteurPLanteDroite", et "HauteurPLanteGauche" comme dans "ww97_test2_40_z1.xlsx" dans cet exemple, mais dans d'autres fichiers il y a un problème, les noms des colonnes "HauteurPLanteDroite", et "HauteurPLanteGauche" ont été écrit "HauteurPlante" donc j'ai 3 fois des colonnes qui s'appellent "HauteurPlante" et j'aimerais pour tous les fichiers supprimer les colonnes qui portent les noms "HauteurPLante" ou"HauteurPLanteDroite" ou "HauteurPLanteGauche" pour solutionner ce problème (ou alors une deuxième option serait de dire à R que si il voit une colonne nommée "HauteurPlante" une fois il ne fait rien mais si il voit une deuxième fois il remplace par "HauteurPLanteDroite" et une troisième fois par "HauteurPlanteGauche" afin que je garde ces colonnes mais je crois que ça serait un peu trop compliqué).
Ensuite j'aimerais écrire les fichiers propres dans "TESTout", pour pouvoir réunir les fichier avec "bind" avec mon code présenté dessus.
Pouvez-vous m'aider à faire ça automatiquement svp?
Merci par avance.
voici les 2 fichiers et voici mon code pour le moment:
Le code:
Code : Tout sélectionner
#Import libraries
library(stringr)
library(readxl)
library(WriteXLS)
library(dataframes2xls)
library(dplyr)
library(varhandle)
library(prettyR) #describe
options(scipen = 999)
setwd ("D:\\FinalDataModel20210820\\in")
####year 97 - list files
listZ1Y97 <- list.files("D:\\FinalDataModel20210820\\TESTin",
pattern = glob2rx("ww97*_z1.xlsx"))
print(listZ1Y97)
#bind the files by col names and write it in TESTOUT:
df_base <- read_excel(listZ1Y97[1])
df_base <- mutate_all(df_base, as.character)
for (i in c(2:length(listZ1Y97))) {
df_join <- read_excel(listZ1Y97[i])
df_join <- mutate_all(df_join, as.character)
df_base <- rbind(df_base,df_join)
}
df_base
View(df_base)
write.csv2(df_base, "D:\\FinalDataModel20210820\\TESTout.csv"
le premier fichier:
Code : Tout sélectionner
ww97_test_40_z1<-structure(list(site = c("Utzenstorf", "Utzenstorf", "Utzenstorf",
"Utzenstorf", "Utzenstorf"), colToDelete1 = c(3, 2, 1, 2, 1),
colToDelete2 = c("t", "t", "t", "t", "t"), siteId = c("U1",
"U1", "U1", "U1", "U1"), weather_station = c("UTZ", "UTZ",
"UTZ", "UTZ", "UTZ"), HauteurPLante...6 = c(2, 2, 3, 4, 5
), HauteurPLante...7 = c(2, 2, 3, 4, 5), HauteurPLante...8 = c(2,
2, 3, 4, 5), plotIdForMonitoring = c(6, 50, 54, 14, 41),
plotIdForSowing = c(1112, 2015, 2411, 1413, 1614), rep = c(1,
2, 3, 1, 2), expectedListNumber = c(111.1001, 111.1001, 111.1001,
192.1013, 192.1013)), row.names = c(NA, -5L), class = c("tbl_df",
"tbl", "data.frame"))
et le deuxième fichier:
Code : Tout sélectionner
ww97_test2_40_z1<-structure(list(site = c("lieu2", "lieu2", "lieu2", "lieu2", "lieu2"
), siteId = c("l2", "l2", "l2", "l2", "l2"), weather_station = c("b",
"b", "b", "b", "b"), HauteurPLante = c(2, 2, 3, 4, 5), HauteurPLanteDroite = c(2,
2, 3, 4, 5), HauteurPLanteGauche = c(2, 2, 3, 4, 5), plotIdForMonitoring = c(6,
22, 54, 14, 41), rep = c(1, 2, 3, 1, 2), expectedListNumber = c(111.1001,
111.1001, 123, 192.1013, 192.1013), plotIdForSowing = c(1112,
2015, 2411, 111, 1614)), row.names = c(NA, -5L), class = c("tbl_df",
"tbl", "data.frame"))