2010-06-30 6 views
2

Format constitué de lignes, chaque ligne a un ensemble d'éléments key = "value".Comment importer des formats de données inhabituels dans R?

exemple Format:

X="1" Y="2" Z="who are you?" 
Y="4" Z="bla bla..." 
X="42" 

Je voudrais importer ces données dans R, une table ou data.frame, où la clé définit la colonne.

+1

Comment enregistrements (lignes) définies? – mbq

Répondre

2

Le code suivant parse le fichier que vous avez fourni sous une forme 'fondue':

data<-NULL 
stream<-file("path");open(stream) #or stream<- textConnection(' X="1" Y="2" Z="who are you?" Y="4" Z="bla bla..." X="42"') 
while(length(ele<-c(scan(stream,what="string",n=1,sep="="),scan(stream,what="string",n=1,sep=" ")))>0){ 
    data<-rbind(data,ele); 
} 
close(stream); 
print(data); 

Maintenant cristallisant:

sapply(unique(data[,1]),function(key) data[data[,1]==key,2]) 
+0

Cela fonctionne. Merci! Pouvez-vous donner un indice sur la façon d'accélérer cela? Il a fallu environ 20 minutes pour lire 40k lignes, peut-être à cause de nombreuses opérations d'E/S vers HDD? Je pense que la lecture de tout le fichier en chaîne et que l'analyse devrait améliorer les performances? – watbywbarif

+0

Et une autre question, la structure de données finale est ok pour certaines choses, mais je voudrais avoir des données dans un autre format, où la coïncidence de ligne est conservée? – watbywbarif

+0

A propos de la vitesse, il pourrait aller plus vite si vous remplacez "=" s par "" s; que tout pourrait être lu comme une série de chaînes séparées par un espace par un balayage (stream, what = "string", sep = ""). A propos de la conservation des lignes, pouvez-vous en dire plus sur la structure de ce fichier et comment voulez-vous le représenter dans R? Et je pense qu'une nouvelle question conviendra à cela. – mbq

Questions connexes