2017-09-09 7 views
1

Voici un extrait de données que je dois analyser:format de données et le téléchargement problème

2014 log[1]: id="1" sys="Sec" sub="fill" severity="inf" dort="30" 2014 log[2]: id="2" sys="Sec" sub="fill" severity="inf" name="dropped"

Excusez-moi si cela est une question évidente, mais quel genre de données est-ce, et comment puis-je obtenir dans un format csv pour analyser? Jusqu'à présent, je l'ai essayé d'utiliser R en spécifiant des espaces comme séparateur, mais cela ne m'a pas obtenir ce que j'ai besoin:

table1<-read.table('data.txt', sep="", fill=TRUE, header = FALSE)

Idéalement, "id", "sys", "sub", "severity", "dort" et "name" seraient les en-têtes de colonnes. Chaque ligne contient à peu près le même nombre de variables, mais certaines lignes ne contiennent pas de variables que les autres lignes font. Pour ces cas, je voudrais qu'il y ait "NULL". Ex: Dans la ligne deux dans les données ci-dessus, sous la colonne dort je voudrais qu'il dise "NULL"

+0

Pouvez-vous fournir plus de 1 ligne de données d'échantillons? Chaque ligne a-t-elle les balises 'id',' sys' etc? – Drj

+0

@Drj modifié pour plus de clarté – cheesetaco

+0

Dans votre exemple, dans la rangée 2, je ne vois pas 'dort'. Pouvez-vous fournir des exemples de données? –

Répondre

0

Espérons que cela aide!

id="1" sys="Sec" sub="fill" severity="inf" dort="30" 
id="2" sys="Sec" sub="fill" severity="inf" name="dropped" 

Considérons que test.txt a mentionné ci-dessus les données puis

library(rjson) 
library(plyr) 

#prepare json data 
txt_file <- readLines("test.txt") 
json_file <- lapply(txt_file, function(x) paste0('{"', gsub(',', ',"',gsub("=",'":',gsub('"\\s+', '",', gsub("^\\s+|\\s+$","",x)))), '}')) 
json_file <- paste0("[", paste(json_file, collapse=","), "]") 

#read json data 
json_data <- fromJSON(json_file) 

#convert it to dataframe 
df <- rbind.fill(lapply(json_data,function(y){as.data.frame(t(y),stringsAsFactors=FALSE)})) 
df[df=='NULL'] <- NA 
df 

sortie est:

id sys sub severity dort name 
1 1 Sec fill  inf 30  NA 
2 2 Sec fill  inf NA dropped 
+0

@cheesetaco Bienvenue sur SO! Vous devriez marquer la réponse satisfaisante comme la réponse correcte si cela répond à votre requête car cela aidera les autres au cas où ils rencontreraient un problème similaire à l'avenir. Merci! – Prem

+0

Je viens d'arriver à cela - mais merci! Vous êtes un sauveteur, cela a fonctionné parfaitement! – cheesetaco

+0

Heureux que cela a aidé :) – Prem