Comme d'habitude, j'ai reçu du fichier SPSS que j'ai importé dans R avec Je veux vraiment contourner les variables de rééditation "à partir de zéro" avec merci! p> SPSS.GET code> fonction de HMISC code>. Je suis dérangé par étiqueté code> classe que hmisg :: spss.get code> ajoute à toutes les variables dans data.frame code>, d'où veuillez le supprimer. p>
étiqueté code> classe me donne des maux de tête lorsque j'essaie d'exécuter ggplot code> ou même quand je veux faire une analyse subalte Une solution serait de supprimer la classe marquée code> de chaque variable dans data.frame code>. Comment puis je faire ça? Est-ce que cela est possible du tout? Sinon, quelles sont mes autres options? P>
as.data.frame (lapply (x, as.numeric)) code> et as.Character code> 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)! P>
5 Réponses :
Vous pouvez essayer la fonction Un moyen rugueux et prêt à vous débarrasser du lispa.sps code> à partir du package étranger code>. étiqueté Code> Classe Créé par SPSS.GET CODE> P> > class(x$MAED)
[1] "labelled" "factor"
> is.factor(x$MAED)
[1] TRUE
En réalité, cette approche ne supprime pas la classe code> marquée code>. Voici une erreur: Erreur en classe (x [[[I]]) <- Z [-1]: objet de remplacement non valide pour être une chaîne de classe code>
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) code> 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
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"
Vous pouvez éviter de créer des variables "étiquetées" dans SPSS.GET avec l'argument:, utilisez.value.labels = false. 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: p> L'erreur que vous rapportez peut être reproduite avec Ce code: p>
Supposons: Vous pouvez supprimer les étiquettes d'une variable appelée "var1" à l'aide de: p> si vous voulez aussi Pour supprimer la classe "labbed", vous pouvez faire: p> ou si la variable a plusieurs classes: p>
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) Utiliser comme suit: p>
J'ai couru votre code et ça a fonctionné pour moi. Mais j'ai aussi une question. La fonction est.List code> Affiche une sortie de true code> lorsqu'il est utilisé un data.frame code> dont la classe est tbl_df code>, < Code> TBL code> et data.frame code>. Comprenez-vous pourquoi la sortie montre cela?
A data.frame code> est une liste même si sa classe n'est pas explicitement "liste". Essayez est (data.frame ()) code>, ainsi que est (Tibble :: Tibble ()) code>; 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 code>, 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")) code>)