10
votes

Supprimer les étiquettes variables connectées à des fonctions d'importation de SPSS étrangers / HMISC

Comme d'habitude, j'ai reçu du fichier SPSS que j'ai importé dans R avec SPSS.GET fonction de HMISC . Je suis dérangé par étiqueté classe que hmisg :: spss.get ajoute à toutes les variables dans data.frame , d'où veuillez le supprimer.

étiqueté classe me donne des maux de tête lorsque j'essaie d'exécuter ggplot ou même quand je veux faire une analyse subalte Une solution serait de supprimer la classe marquée de chaque variable dans data.frame . Comment puis je faire ça? Est-ce que cela est possible du tout? Sinon, quelles sont mes autres options?

Je veux vraiment contourner les variables de rééditation "à partir de zéro" avec as.data.frame (lapply (x, as.numeric)) et as.Character le cas échéant ... et je ne veux certainement pas courir de SPSS et retirer les étiquettes manuellement (n'aime pas les SPSS, ni les soins à l'installer)!

merci!


0 commentaires

5 Réponses :


2
votes

Vous pouvez essayer la fonction lispa.sps code> à partir du package étranger code>.

Un moyen rugueux et prêt à vous débarrasser du étiqueté Code> Classe Créé par SPSS.GET CODE> P>

> class(x$MAED)
[1] "labelled" "factor"  
> is.factor(x$MAED)
[1] TRUE


4 commentaires

En réalité, cette approche ne supprime pas la classe marquée . Voici une erreur: Erreur en classe (x [[[I]]) <- Z [-1]: objet de remplacement non valide pour être une chaîne de classe


Cela a fonctionné avec un fichier SPSS que j'ai essayé. Pouvez-vous s'il vous plaît créer un lien vers un exemple de fichier où cela échoue? Ou donner la sortie de (i in 1: ncol (x)) Imprimer (Classe (x [[I]])) où X est la trame de données importée.


N'aimeriez-vous pas essayer sapply (x, classe) au lieu d'utiliser la boucle? Oh, et, malheureusement, je ne me souviens pas du fichier de données que j'utilisais ... c'était il y a si longtemps ...


Un exemple de cet élément important est AC ("marqué", "facteur") objet de classe Briser les fonctions DLYR



0
votes

Eh bien, j'ai compris que la fonction Sclac. / code> peut être utilisée pour supprimer les classes (qui le dirait, aye ?!):

library(Hmisc)
# let's presuppose that variable x is gathered through spss.get() function
# and that x is factor
> class(x)
[1] "labelled" "factor"
> foo <- unclass(x)
> class(foo)
[1] "integer"


0 commentaires

4
votes

Vous pouvez éviter de créer des variables "étiquetées" dans SPSS.GET avec l'argument:, utilisez.value.labels = false. XXX

Le code de Bhattacharya pourrait échouer si la classe du Les vecteurs étiquetés étaient simplement "étiquetés" plutôt que c ("étiquetés", "facteur") auquel cas il aurait dû être: xxx

L'erreur que vous rapportez peut être reproduite avec Ce code: xxx


0 commentaires

1
votes

Supposons: xxx

Vous pouvez supprimer les étiquettes d'une variable appelée "var1" à l'aide de: xxx

si vous voulez aussi Pour supprimer la classe "labbed", vous pouvez faire: xxx

ou si la variable a plusieurs classes: xxx p> J'espère que cela aide!


0 commentaires

15
votes

Voici comment je me débarrasse complètement des étiquettes. Semblable à la solution de JyoTirmy, mais fonctionne pour un vecteur ainsi que des données. (Crédits partiels à Frank Harrell) xxx

Utiliser comme suit: xxx

edit < P> Voici un bit d'une version plus propre de la fonction, mêmes résultats: xxx


2 commentaires

J'ai couru votre code et ça a fonctionné pour moi. Mais j'ai aussi une question. La fonction est.List Affiche une sortie de true lorsqu'il est utilisé un data.frame dont la classe est tbl_df , < Code> TBL et data.frame . Comprenez-vous pourquoi la sortie montre cela?


A data.frame est une liste même si sa classe n'est pas explicitement "liste". Essayez est (data.frame ()) , ainsi que est (Tibble :: Tibble ()) ; Nous pourrions dire que les deux DF et les treillis sont des listes «contraintes». Ils sont généralement rectangulaires (une exception étant qu'un DF peut contenir une matrice, qui est assez étrange), et si vous regardez le code source pour data.frame , vous verrez qu'il est fait à partir de listes ( Par exemple, retour (structure (liste (), noms = caractère (), rangée.names = rangée.names, class = "data.frame")) )