Frage

Wie üblich, ich habe einige SPSS-Datei, dass ich in R mit spss.get Funktion aus Hmisc Paket importiert haben. Ich bin mit labelled Klasse gestört, dass Hmisc::spss.get auf alle Variablen in data.frame fügt hinzu, will daher, es zu entfernen.

labelled Klasse gibt mir Kopfschmerzen, wenn ich zu laufen ggplot versuchen oder sogar, wenn ich will etwas menial Analyse tun! Eine Lösung wäre, labelled Klasse von jeder Variablen in data.frame zu entfernen. Wie kann ich das machen? Ist das möglich? Wenn nicht, was sind meine andere Optionen?

Ich möchte Bypass reediting Variablen „von Grund auf“ wirklich mit as.data.frame(lapply(x, as.numeric)) und as.character wo anwendbar ... Und ich will sicher nicht manuell SPSS und entfernen Etiketten laufen (nicht wie SPSS, noch Pflege, es zu installieren) !

Danke!

War es hilfreich?

Lösung

Sie können vermeiden, "markiert" Variablen in spss.get mit dem Argument zu schaffen.:, Use.value.labels = FALSE

w <- spss.get('/tmp/my.sav', use.value.labels=FALSE, datevars=c('birthdate','deathdate'))

Der Code von Bhattacharya könnte fehlschlagen, wenn die Klasse des markierten Vektor wurde einfach „markiert“, anstatt c ( „markiert“, „Faktor“) in diesem Fall sollte es gewesen sein:

class(x[[i]]) <- NULL  # no error from assignment of empty vector

Der Fehler kann berichten, mit diesem Code wiedergegeben werden:

> b <- 4:6
> label(b) <- 'B Label'
> str(b)
Class 'labelled'  atomic [1:3] 4 5 6
  ..- attr(*, "label")= chr "B Label"
> class(b) <- class(b)[-1]
Error in class(b) <- class(b)[-1] : 
  invalid replacement object to be a class string

Andere Tipps

Hier ist, wie ich die Etikett ganz loszuwerden. Ähnlich wie Jyotirmoy Lösung aber Arbeiten für einen Vektor sowie eine data.frame. (Partial Kredite an Frank Harrell)

clear.labels <- function(x) {
  if(is.list(x)) {
    for(i in 1 : length(x)) class(x[[i]]) <- setdiff(class(x[[i]]), 'labelled') 
    for(i in 1 : length(x)) attr(x[[i]],"label") <- NULL
  }
  else {
    class(x) <- setdiff(class(x), "labelled")
    attr(x, "label") <- NULL
  }
  return(x)
}

Verwenden Sie wie folgt vor:

my.unlabelled.df <- clear.labels(my.labelled.df)

Sie können die read.spss Funktion aus dem foreign Paket ausprobieren.

Eine grobe und bereit Art und Weise der labelled Klasse von spss.get erstellt, um loszuwerden,

for (i in 1:ncol(x)) {
    z<-class(x[[i]])
    if (z[[1]]=='labelled'){
       class(x[[i]])<-z[-1]
       attr(x[[i]],'label')<-NULL
    }
}

Aber können Sie bitte ein Beispiel geben, wo labelled Probleme verursacht?

Wenn ich eine Variable MAED in einem Datenrahmen x von spss.get erstellt haben, die ich habe:

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

So gut geschriebenen Code, der einen Faktor (sagen wir) erwartet sollten keine Probleme haben.

Nun, dachte ich, dass unclass Funktion aus genutzt werden, um Klassen zu entfernen (die sagen würden, ja?!):

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"

Es ist nicht die glücklichste Lösung, stellen Sie sich vor zurück-Converting Bündel von Vektoren ... Wenn jemand diese Tops, ich es als Antwort überprüfen werde ...

Nehmen wir an:

library(Hmisc)
w <- spss.get('...')

Sie können die Etiketten einer Variablen entfernen namens „var1“ durch die Verwendung:

attributes(w$var1)$label <- NULL

Wenn Sie auch die Klasse „labbled“ entfernen möchten, können Sie tun:

class(w$var1) <- NULL 

oder wenn die Variable mehr als eine Klasse:

class(w$var1) <- class(w$var1)[-which(class(w$var1)=="labelled")]

Hope, das hilft!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top