Lire un fichier dont une de ses colonne est formaté différemment
Bonjour,
Je souhaite lire un fichier qui se compose comme ceci:
Code:
1 2 3 4 5
|
id c1 c2 paramètre
1 val1 val2 a = 1, b = 2
2 val1 val2 b = 1
3 val1 val2 c = 5, a = 2 |
(s'il y a plusieurs paramètres ce sera toujours séparé par une virgule)
Le problème est la colonne paramètre que je n'arrive pas récupérer correctement puisqu'il décompose chaque caractères en les mettant dans des nouvelles colonnes.
Comment puis-je faire pour récupérer les valeurs de paramètre pour les mettre dans une seul colonne ?
Importer un fichier sans séparateur
Bonjour,
• L'idéal serait d'avoir un fichier avec séparateur de variables (point-virgule, tabulation...) :
Code:
1 2 3 4 5 6
| df <- read.csv2(text="
id;c1;c2;parametre
1;val1;val2;a = 1, b = 2
2;val1;val2;b = 1
3;val1;val2;c = 5, a = 2
") |
Code:
1 2 3 4 5
| > df
id c1 c2 parametre
1 1 val1 val2 a = 1, b = 2
2 2 val1 val2 b = 1
3 3 val1 val2 c = 5, a = 2 |
• Si le fichier est colonné (c'est-à-dire que toutes les valeurs sont alignées), vous pouvez utiliser la fonction read.fwf() :
Code:
1 2 3 4
| df <- read.fwf("d:/temp/test.txt", widths=c(1,1,4,1,4,4,12), skip=1)
df <- df[,-c(2,4,6)]
names <- unlist(read.table("d:/temp/test.txt",nrows=1))
names(df) <- names |
Code:
1 2 3 4 5
| > df
id c1 c2 parametre
1 1 val1 val2 a = 1, b = 2
2 2 val1 val2 b = 1
3 3 val1 val2 c = 5, a = 2 |
ou la fonction read.fortran() qui permet de spécifier le format des variables et de sauter des colonnes :
Code:
1 2 3
| df <- read.fortran("d:/temp/test.txt", c("I1","X","A4","X","A4","X4","A12"), skip=1)
names <- unlist(read.table("d:/temp/test.txt",nrows=1))
names(df) <- names |
Code:
1 2 3 4 5
| > df
id c1 c2 parametre
1 1 val1 val2 a = 1, b = 2
2 2 val1 val2 b = 1
3 3 val1 val2 c = 5, a = 2 |
• Si le fichier n'est pas colonné, vous pouvez importer le fichier en une seule variable, supprimer les espaces gênantes, découper la variable avec la fonction word() et remettre les espaces dans la variable parametre (j'ai modifié id=1 en id=10 dans votre exemple).
Code:
1 2 3 4 5 6 7 8 9 10 11
| df <- read.table("d:/temp/test.txt", header=FALSE, sep="§", skip=1)
library(stringr)
df$V1 <- str_replace_all(df$V1," = ","=")
df$V1 <- str_replace_all(df$V1,", ",",")
df$V1 <- str_replace(df$V1," "," ")
df$id <- word(df$V1,1)
df$c1 <- word(df$V1,2)
df$c2 <- word(df$V1,3)
df$parametre <- word(df$V1,4)
df$parametre <- str_replace_all(df$parametre,"="," = ")
df$parametre <- str_replace_all(df$parametre ,",",", ") |
Code:
1 2 3 4 5
| > df
V1 id c1 c2 parametre
1 10 val1 val2 a=1,b=2 10 val1 val2 a = 1, b = 2
2 2 val1 val2 b=1 2 val1 val2 b = 1
3 3 val1 val2 c=5,a=2 3 val1 val2 c = 5, a = 2 |
Cordialement,