J'ai besoin de lire plusieurs fichiers dans R, d'effectuer un nettoyage, puis de les combiner en une seule trame de données. Les fichiers commencent tous essentiellement comme ceci:R Importer des fichiers avec un nombre différent de lignes initiales à ignorer
=~=~=~=~=~=~=~=~=~=~=~= PuTTY log 2016.07.11 09:47:35 =~=~=~=~=~=~=~=~=~=~=~=
up
Upload #18
Reader: S1 Site: AA
--------- upload 18 start ---------
Type,Date,Time,Duration,Type,Tag ID,Ant,Count,Gap
E,2016-07-05,11:45:44.17,"upload 17 complete"
D,2016-07-05,11:46:24.69,00:00:00.87,HA,900_226000745055,A2,8,1102
D,2016-07-05,11:46:43.23,00:00:01.12,HA,900_226000745055,A2,10,143
La ligne avec les en-têtes de colonnes est "Type,Date,Time,Duration,Type,Tag ID,Ant,Count,Gap"
. Les données devraient avoir 9 colonnes. Le problème est que le nombre de lignes au-dessus de la chaîne d'en-tête est différent pour chaque fichier, donc je ne peux pas simplement utiliser skip = 5. J'ai aussi besoin de lignes commençant par "D,"
, tout le reste est des messages, pas des données.
Quelle est la meilleure façon de lire dans mes fichiers, en m'assurant que j'ai 9 colonnes et en sautant toutes les ordures?
J'utilise la fonction read_csv
du package readr()
car elle a généré le moins de problèmes de mise en forme. Mais, je suis ouvert à toutes les nouvelles idées, y compris un moyen de lire en quelques lignes qui commencent par "D,"
. J'ai joué avec en utilisant read.table
et skip = grep("Type," readLines(i))
, mais il ne semble pas trouver la chaîne d'en-tête correctement. Voici mon code de base:
dataFiles <- Sys.glob("*.*")
datalist <- list()
for (i in dataFiles) {
d01 <- read_csv(i, col_names = F, na = "NA", skip = 35)
# do clean-up stuff
datalist[[i]] <- d
}
est la valeur 'd' dans la colonne' type' cohérente? –
Pouvez-vous retravailler votre question avec des données reproductibles afin que d'autres puissent la tester? En principe, vous êtes sur la bonne voie car c'est un problème qui peut être résolu en lisant un sous-ensemble de vos données (utilisez le paramètre 'n_max' dans' read_csv') comme données temporaires et en utilisant un grep pour stocker l'index pour le nombre approprié de lignes à ignorer pour chaque fichier de données. – dshkol
Oui @ D.sen, 'D' est toujours dans la colonne' Type'. – notacodr