J'ai des centaines de fichiers Excel (.xls) et chacun d'eux a (sur une ligne aléatoire) une "table", qui a trois colonnes chacune (Station, Paramètre et Unité). Je veux écrire un script qui lit tous les fichiers et quand il lit ces trois cellules (Station, Paramètre, Unité) ensemble sur une seule ligne, il commence à copier chaque ligne ci-dessous jusqu'à ce qu'elle atteigne la fin du tableau. À la fin de chaque table, il y a toujours trois NA. Mais la fin du tableau n'est pas la fin du fichier, il y a plus de données ci-dessous, mais je ne veux pas de ça.
Mon plus gros problème est que puisque je ne sais pas dans chaque ligne le tableau sera, je dois dire à R de lire toutes les lignes et de le détecter, ce que je ne peux pas faire.
Ci-dessous, j'ai visualisé un exemple de table et j'ai également écrit le code pour que vous puissiez le reproduire dans R.
|NA |NA |NA | | Station | Parameter | Unit | |EST1 | P1 |M | |NA | P2 |KM | |NA | P3 |MM | |EST2 | P1 |M | |NA | P2 |KM | |NA | P3 |MM | |EST3 | P1 |M | |NA | P2 |KM | |NA | P3 |MM | |NA |NA |NA |
code pour reproduire le tableau:
a= c(NA, 'Station', 'EST1', NA, NA, "EST2", NA, NA, "EST3", NA, NA, NA)
b= c(NA, 'Parameter', 'P1', 'P2', 'P3', 'P1', 'P2', 'P3','P1','P2','P3', NA)
c= c(NA, 'Unit', 'M', 'KM', 'MM','M', 'KM', 'MM','M', 'KM', 'MM', NA)
data =(data.frame(a,b,c))
Cela fera peut-être l'affaire, en supposant que la Parameter
colonne n'en a pas NAs
.
library(magrittr)
# find start and ending row of the table
starting_row <- row(data)[which(data$a == "Station"), ][1]
ending_row <- row(data)[which(is.na(data$b)), ][,1] %>% max() -1
# slice the data
table1 <- data[ starting_row:ending_row, ]
table1
> a b c
> 2 Station Parameter Unit
> 3 EST1 P1 M
> 4 <NA> P2 KM
> 5 <NA> P3 MM
> 6 EST2 P1 M
> 7 <NA> P2 KM
> 8 <NA> P3 MM
> 9 EST3 P1 M
> 10 <NA> P2 KM
> 11 <NA> P3 MM
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras