les données importées en tant que classe “null” - impossible de réaliser des statistiques, impossible de changer de classe
Je suis plutôt longue des problèmes concernant mes données et je crois que ma difficulté à remonter la trace de l'importation des données. J'ai regardé beaucoup d'autres questions et réponses ainsi que de nombreux sites d'aide que je peux trouver, mais je n'arrive pas à faire quelque chose qui fonctionne. Je suis attemping pour exécuter certains TTests sur mes données et ont été jusqu'à présent incapables de le faire. Je crois que la cause est que les données sont importées en tant que classe NULL. J'ai essayé d'inclure autant d'informations ici que je peux montrer ce que je suis en train de travailler avec les types de problèmes que je vais avoir (dans le cas où le problème est dans une autre zone)
Une vue d'ensemble de mes données et de ce que j'ai fait jusqu'à présent est: est-ce
Exemple de Fichier de données (tel qu'affiché dans la R après la lecture des données .fichier csv):
Part Q001 Q002 LA003 Q004 SA005 D106
1 5 3 text 99 text 3
2 3 text 2 text 2
3 2 4 3 text 5
4 99 5 text 2 2
5 4 2 1 text 3
Donc dans mes données, les "réponses" sont de 1 à 5. 99 représente une question qui a été répondu à N/A. les blancs représentent des questions sans réponse. le "texte" des questions sont longues et courtes réponses/commentaires provenant d'une enquête. Ils sont tous stockés dans un vaste ensemble de données sur plus de 150 Participants (Partie) et plus de 300 questions (numérotée soit Q, LA, SA, ou D en fonction de la question avec de 1 à 5 de réponse, réponse, réponse courte, ou démographiques (également des réponses numériques 0 de la pensée 6)).
Quand je importer les données, j'ai besoin de ne pas tenir compte des vides ou 99 réponses afin de ne pas interférer avec les statistiques. J'ai aussi ne se soucient pas de commentaires, donc je filtre tous.
EDIT: fichier de données ressemble à:
Part,Q001,Q002,LA003,Q004,SA005,D006
1,5,3,text,99,text,3
2,3,,text,2,text,2
etc...
Je suis en utilisant les lignes suivantes pour lire les données:
data.all <- read.table("data.csv", header=TRUE, sep=",", na.strings = c("","99"))
data <- data.all[, !(colnames(data.all) %in% c("LA003", "SA005")
maintenant, quand je tape
class(data$Q001)
- Je obtenir NULL
J'ai besoin de ces être Numériques. Je peux utiliser le résumé(de données) pour obtenir les moyens et, mais lorsque j'essaie d'exécuter ttests, j'obtiens des erreurs, y compris la valeur NULL.
J'ai essayé de mettre cette colonne en objets numériques en utilisant
data<-sapply(data,as.numeric)
et j'ai essayé
data[,1]<-as.numeric(as.character(data[,1]))
(et avec les 2 au lieu de 1, mais je ne comprends pas vraiment le sapply syntaxe, je l'ai vu dans plusieurs autres réponses, et a été d'essayer de le faire fonctionner)
quand je puis tapez
class(data$Q001)
Je reçois le message "Erreur: $ opérateur n'est pas valide pour l'vecteurs
Si je n'essayez pas d'utiliser sapply, et j'essaie d'exécuter un test-t bilatéral, j'ai créé des sous-ensembles tels que
data.2<-subset(data, D106 == "2")
data.3<-subset(data, D106 == "3")
et j'utilise
t.test(data.2$Q001~data.3$Q001, na.rm=TRUE)
et je reçois "de type non valide (NULL) pour la variable de données.2$Q001'
J'ai essayé d'utiliser la syntaxe différente, en essayant de voir si je peux trouver quelque chose à travailler, et
t.test(data.2$Q001, data.3$Q001, na.rm=TRUE)
donne "En est.na(d) : est.na() appliquée à la non-(liste ou un vecteur) de type 'NULL'" et "Dans la moyenne.par défaut(x) : l'argument n'est pas numérique ou logique: le retour de NA"
Donc, maintenant, je pense que j'ai été clair sur ce que je suis en train de faire et certaines des choses que j'ai essayé...
Comment puis-je importer mes données de sorte que les nombres (en particulier le nombre dans une colonne avec un en-tête à partir du Q) sont lues de manière précise que les chiffres, et de ne pas obtenir une valeur NULL classe appliquées? Que dois-je faire pour récupérer mes données correctement importés pour exécuter TTests sur elle? J'ai utilisé TTests sur beaucoup de données dans le passé, mais il a toujours été données, j'ai enregistré manuellement dans excel (et donc une seule colonne de chiffres sans espaces ou NAs) et je n'ai jamais eu un problème, et je ne comprends pas ce que c'est sur cet ensemble de données que je ne peux pas le faire fonctionner. Toute l'assistance dans la bonne direction est très apprécié!
- Êtes-vous vraiment à l'aide de
sep=","
, et il est de votre fichier de données vraiment pas séparées par des virgules? La syntaxe ci-dessus est un peu cabossé, mais à partir de ce que vous avez montré, il semble que vous essayez de lire l'espace de données séparées par une virgule séparateur spécifié ... Quel est le résultat destr(data.all)
...??? - désolé, je les ai séparés par des espaces dans mon exemple, afin qu'il soit plus facile à lire. Voilà comment mes données ressemble quand de type "données", dans R. Le fichier d'origine est Partie,Q001,Q002,LA003,Q004,SA005,D006. Je vais modifier pour que ce soit clair. Obtenir des données n'est pas la question, la classe qui est de l'importation, comme cela semble être la question...
- Nous avons toujours besoin de voir la sortie de
str(data.all)
etstr(data)
pour être en mesure d'obtenir n'importe où avec cette ... - Lorsque j'effectue
str(data.all)
sur mon grand réel des données de fichier-je obtenir'data.frame': 172 obs. of 423 variables: $ ï..Q001 : int 5 4 5 5 5 4 3 5 4 4 ... $ Q002 : int 5 4 3 5 4 5 2 5 4 4 ... $ Q003 : int 5 4 4 5 4 5 3 5 3 4 ... $ Q004 : int 5 4 4 5 4 5 3 5 4 4 ... $ Q005 : int 5 4 4 5 4 5 2 5 4 4 ... $ Q006 : int 5 4 4 5 4 4 2 NA 5 4 ...
Quand je puis lui demander d'afficher les donnéesdata.all$Q001
- je obtenirNULL
Donc, c'est de me donner NULL avant même d'entreprendre d'autres manipulations autres que de lire le fichier de données. - Notez qu'il existe un couple de personnages étranges avant le nom de la première colonne:
$ ï..Q001
comme ci-dessus. Un couple de questions: (1) faire fonctionner les choses, OK pour les autres colonnes (par exemple,Q002
)? (2) ils travaillent, si vous utilisezdata[[1]]
plutôt quedata$Q001
? (3) Pouvez-vous vérifier si il pourrait y avoir quelques drôles de caractères dans l'entête de votre fichier? - Eh bien, c'est intéressant. Il ressemble à
data[[1]]
donne les informations appropriées, maisdata$Q001
renvoie la valeur NULL.data$Q002
renvoie des données, comme le faitdata[[2]]
.class(data$Q001)
renvoie la valeur NULL,class(data$Q002)
renvoie un entier. Dans le fichier il n'y a pas d'étranges caractères avant de la première ligne de l'information. La section du haut de mes fichiers a "Q001", "Q002" etc, alors la ligne suivante commence 5, 5, 5, alors maintenant, je suis vraiment confus quant à pourquoi Q001 est de donner à null, mais les autres sont au travail. Je ne connaissais pas les données de[[1]] méthode de l'appel de colonnes, qui va certainement être utile, au moins! - Vous pouvez résoudre ce problème en spécifiant
names(data)[1] <- "Q001"
, je pense. Il y a de certains des caractères bizarres dans la tête, je pense qu'ils sont tout simplement pas en montrant dans quelle que soit la façon dont vous êtes en inspectant les données. C'est pourquoi nous montrant les résultats destr(data.all)
tout de suite aurait été utile ... - Qui n'a correctement l'étiquette de la colonne pour moi, merci! J'avais regardé le fichier dans le bloc-notes et n'ai rien vu de bizarre, je n'avais jamais entendu parler de str(données) avant, donc j'étais confus quant à ce qu'il faisait réellement, j'ai pensé qu'il avait quelque chose à voir avec la question que vous aviez demandé à propos de la virgule separater ou j'aurais répondu à votre premier commentaire, désolé! Je n'ai jamais rien fait de plus en plus complexe avec R que de lire un fichier délimité par des tabulations avec les en-têtes, puis exécutez t base.test/analyse de variance/résumé avec elle, donc je ne sais pas vraiment la plus complexe des articles que j'ai besoin de travailler avec l'ensemble de données actuel... conduisant à ces problèmes
Vous devez vous connecter pour publier un commentaire.
Cela fonctionne pour moi:
Le seul que je peux penser, c'est que votre deuxième commande (qui était à côté de certains de résiliation de parenthèses et de crochets) ne fonctionne pas du tout, vous avez manqué de voir le message d'erreur, et vous faites référence à certains défini précédemment
data
objet qui n'ont pas les mêmes colonnes définies. Par exemple,class(z$QQQ)
estNULL
suivant l'exemple ci-dessus.modifier: il semble que le problème d'origine était un peu bizarre/caractères illisibles dans l'en-tête qui a sali le nom de la première colonne. Manuellement renommer la colonne (
names(data)[1] <- "Q001"
) semble avoir résolu le problème.z$Q001 > logical(0)
Cependant, mon code directement après l'avoir lu en donnedata.all$Q001 > NULL
Mon code est le même sauf que je suis de la lecture à partir du fichier texte de données.csv plutôt que d'utiliser textConnection. Je n'ai pas couru mon deuxième ligne de code pour filtrer LA/SA colonnes et Q colonnes donnent toujours NULLclass(data$Q001)
format, alors que tous sont appropriés lors de l'utilisation declass(data[[1]])
. Donc la solution travaille à la résolution de chaque colonne, une par une, mais ne résout pas le problème initial de pourquoi ces colonnes sont affectés de la valeur NULL dans la première place. Colonne 1 importées avec des caractères illisibles...str()
ne sera pas afficher ma liste complète (tronque après 100), donc je ne peux pas voir si ceux qui en quelque sorte ont des caractères aléatoires à l'avant. Le seul lien que j'ai est que les colonnes après une réponse le texte de la colonne deviendront nuls (même si cela n'explique pas pourquoi la première colonne ont ce problème), mais je n'ai pas été en mesure de vérifier chaque ligne il y a plus de 500 d'entre eux. Ainsi, alors qu'il semble que les valeurs sont correctes et l'enregistrement en tant que nombres entiers, je ne peux pas connaître les raisons de ces colonnes ont été affectés comme NULLE dans la première place, et tandis que le correctif fonctionne à réaffecter les noms, il résout, ne résout en rien.names(data) <- paste("Q",1:999)
(obtention des zéros est un peu plus de travail -- voir?sprintf
et éventuellement demander de l'aide dans une autre question). Si vous voulez juste pour voir tous les noms (pour connaître celles qui sont foiré) nenames(data)