2016-07-27 2 views
1

I ont une série de fichiers txt formatés de la même manière. Les premières lignes concernent toutes les informations sur les fichiers. Il n'y a pas de noms de variables. Comme vous pouvez le voir, les espaces entre les facteurs sont incohérents, mais les colonnes sont alignées à gauche ou alignées à droite. Je sais que SAS peut directement lire les données avec ce format et je me demande si R fournit une fonction similaire.lire les fichiers txt avec des données aligné à gauche, mais le nombre d'espaces incompatibles en R

J'ai essayé la fonction read.csv pour charger ces données et je veux les enregistrer dans un data.frame avec 3 colonnes, alors qu'il s'avère que l'option sep = "\ s" (plusieurs espaces) dans la fonction ne peut pas reconnaître expression régulière.

J'ai donc essayé de lire ces données dans une première et utiliser la fonction substr variable pour les diviser comme suit. Etape 1

Factor<-data.frame(substr(Share$V1,1,9),substr(Share$V1,9,14),as.numeric(substr(Share$V1,15,30))) 

step2

Mais ceci est tout à fait inintelligente, et le besoin de compter les espaces entre. Je dérive s'il y a une méthode pour charger directement les données en trois colonnes.

> Factor 
    F T  S 
1 +B2P  A  1005757219 
2 +BETA  A  826083789 

Répondre

0

Nous pouvons utiliser read.table lire comme 3 colonnes

read.table(text=as.character(Share$V1), sep="", header=FALSE, 
       stringsAsFactors=FALSE, col.names = c("FactorName", "Type", "Share")) 
# FactorName Type  Share 
#1  +B2P A 1005757219 
#2  +BETA A 826083789 
#3  +E2P A 499237181 
#4  +EF2P A 38647147 
#5  +EFCHG A 866171133 
#6 +IL1QNS A 945726018 
#7 +INDMOM A 862690708 

Une autre option serait de le lire directement à partir du fichier, skip ping la ligne d'en-tête et changer les noms de colonnes

read.table("yourfile.txt", header=FALSE, skip=1, stringsAsFactors=FALSE, 
       col.names = c("FactorName", "Type", "Share")) 
+1

Je vois où je mal codé. L'argument par défaut sep = "" (sans espace) fait référence à un ou plusieurs espaces, mais j'ai tapé sep = "" (un espace) qui conduit à une correspondance exacte et à une division incorrecte. les colonnes.Ainsi, la fonction read.csv fonctionne également pour ce problème. – Mengqiu