2016-07-22 1 views
-2

J'ai rencontré un problème très étrange lors de la lecture d'un fichier .csv dans une trame de données newdata en utilisant read.csv.R - La colonne de chaîne est considérée comme un entier

Une de la colonne est « Site », et il devrait être une chaîne:

  • Quand je regarde la trame de données en utilisant View Je vois qu'il contient des valeurs telles que « www.google.com » , "www.facebook.com" etc.
  • Si je vérifie quel est le type de la colonne par typeof(newdata$Site), j'obtiens le résultat "entier".
  • Si je vérifie la fréquence d'apparition de chaque chaîne en utilisant table(newdata$Site), et que j'écris ce tableau dans un fichier .csv, j'obtiens une table de fréquence appropriée pour chaque valeur, avec une valeur numérique supplémentaire (par exemple une colonne sans nom avec des valeurs numériques , une colonne nommée var1 avec les chaînes de sites (par exemple "www.google.com") et une colonne nommée Freq avec la fréquence).

J'ai essayé de créer une nouvelle colonne qui combine plusieurs valeurs dans un (par exemple « www.google.com » et « www.google.co.uk » dans « Google ») et moi grepl, je a réalisé que R traite la colonne d'origine non comme une chaîne ...

Lorsque j'ai essayé de sous-ensemble cette colonne que par a = newdata[,"Site"], je suis arrivé que a est du facteur de type ... écrire à .csv résultats dans un longue ligne de toutes les valeurs ....

Qu'est-ce que je fais de mal ???? Je suis un peu nouveau à ces choses et je ne sais vraiment pas quoi faire ...

Merci !!!

+0

Pour l'amour de tout le monde, essayez de formater votre texte pas comme un tas de mots. Et jetez un oeil à 'str (newdata)' pour voir votre colonne est un facteur, puis recherchez des facteurs (première étape: '? Factor') – Tensibai

+2

Avez-vous lu le manuel? Probablement pas. Personne ne le fait. Ils viennent poster ici en premier. 'help (read.csv)'. Plus précisément, l'argument 'stringsAsFactors'. –

+0

Hey @RichardScriven - Je n'avais aucune idée que cela est lié à la lecture de CSV ... Mais j'apprécie votre préoccupation :) – user3017075

Répondre

1

Vous avez déjà creusé beaucoup. Vous savez que votre colonne Site est un facteur et il a typeof() entier.

Pour éviter le codage des chaînes comme facteurs lors de la lecture des données, utilisez:

read.csv(..., stringsAsFactors = FALSE) 

Les facteurs sont stockés sous forme de nombres entiers, où nombre entier donne la position de ses niveaux. Essayez:

x <- gl(3,2,labels=letters[1:3]) 
#[1] a a b b c c 
#Levels: a b c 

typeof(x) 
#[1] "integer" 

levels(x) 
#[1] "a" "b" "c" 

levels(x)[x] ## equivalent to "as.character(x)", but more efficient 
#[1] "a" "a" "b" "b" "c" "c" 
+0

Et puisque nous avons maintenant la documentation sur place, un lien vers (http://stackoverflow.com/documentation/r/1104/factors # t = 201607221527562701029 & a = remarques) – Benjamin

+0

Je viens de copier et coller le lien, mais je ne vous demandais pas de le faire. Juste en l'ajoutant comme un supplément. :) – Benjamin

+0

Merci beaucoup @ZheyuanLi! Tant pour la solution que pour l'attitude didactique! – user3017075