2010-01-27 15 views
14

Ich habe eine Reihe von Stata .dta Dateien, die Ich mag würde in R. verwendenMit Stata Variablenlabels in R

Mein Problem ist, dass die Variablennamen mir nicht hilfreich sind, da sie wie „q0100 sind, "" Q0565 "," Q0500 "und" Q0202 ". Sie werden jedoch wie "PSU", "Anzahl der Schwangeren", "Haushaltsvorstand" und "Wegpunkt" bezeichnet.

Ich möchte in der Lage sein, die Etiketten ("PSU", "Wegpunkt", etc.) zu greifen und sie als meine Variablen/Spaltennamen zu verwenden, da diese für mich leichter zu bearbeiten sind.

Gibt es eine Möglichkeit, dies entweder vorzugsweise in R oder durch Stata selbst zu tun? Ich kenne read.dta in der Bibliothek (fremd), weiß aber nicht, ob es die Bezeichnungen in Variablennamen umwandeln kann.

+0

am Computer nicht jetzt , aber ich dünn hmisc hat eine Funktion zum Importieren von Etiketten aus Spss. könnte auch mit Stata arbeiten? – Andreas

+0

Ich weiß, das ist sehr alt, aber schauen Sie unten, ob meine Port-Lösung funktioniert. –

Antwort

18

R hat keine eingebaute Möglichkeit, variable Etiketten zu verarbeiten. Persönlich denke ich, dass dies ein Nachteil ist, der behoben werden sollte. Hmisc bietet einige Funktionen für variable Haddling-Labels, aber die Labels werden nur von Funktionen in diesem Paket erkannt. read.dta erstellt ein data.frame mit einem Attribut "var.labels" welches die Beschriftungsinformation enthält. Sie können daraus ein Datenwörterbuch erstellen.

> data(swiss) 
> write.dta(swiss,swissfile <- tempfile()) 
> a <- read.dta(swissfile) 
> 
> var.labels <- attr(a,"var.labels") 
> 
> data.key <- data.frame(var.name=names(a),var.labels) 
> data.key 
      var.name  var.labels 
1  Fertility  Fertility 
2  Agriculture  Agriculture 
3  Examination  Examination 
4  Education  Education 
5   Catholic   Catholic 
6 Infant_Mortality Infant.Mortality 

Natürlich hat diese .dta-Datei nicht sehr interessante Etiketten, aber Ihre sollte sinnvoller sein.

+0

Danke, ich bin gerade auf http://stat.ethz.ch/R-manual/R-patched/library/foreign/html/read.dta.html gestolpert. Aber ich habe > Attribute (a) verwendet $ var.labels Dann kann ich die data.key-Idee, die Sie hatten, verwenden und eine Funktion erstellen, die die Variablen als solche umbenennt. Danke nochmal. – Jared

+0

sicher, aber Variablenbeschriftungen können ziemlich ausführlich sein und Zeichen enthalten, die für Variablennamen nicht ratsam sind. –

+0

Ist es immer noch wahr, dass es keine Möglichkeit gibt, variable Labels in R zu speichern? – Heisenberg

3

Sie können die Variablenbeschriftungen in Stata in Variablennamen konvertieren, bevor Sie sie in eine R- oder Textdatei exportieren.
Wie Ian erwähnt, machen Variablenlabels normalerweise keine guten Variablennamen, aber wenn Sie Leerzeichen und andere Zeichen in Unterstriche konvertieren und wenn Ihre Variablenbeschriftungen nicht zu lang sind, können Sie Ihre Variablen mit den Variablen ganz einfach neu beschriften.

Unten finden Sie ein Beispiel mit dem eingebauten Stata-Dataset "cancer.dta", um alle Variablennamen durch var-Bezeichnungen zu ersetzen - wichtig ist, dass dieser Code nicht versucht, Variablen ohne Variablenbeschriftungen umzubenennen. Beachten Sie, dass ich auch ein Dataset ausgewählt habe, in dem viele Zeichen vorhanden sind, die beim Benennen einer Variablen nicht hilfreich sind (zB: =, 1, ',.,() Usw.) ... Sie können beliebige Zeichen hinzufügen, die möglicherweise lauern in Ihre Variablenlabels in die Liste in der 5. Zeile: „local Zeichen“ ...“" und es werden die Änderungen für Sie vornehmen:

****************! BEGIN EXAMPLE 
//copy and paste this code into a Stata do-file and click "do"// 
sysuse cancer, clear 
desc 
** 
local chars "" " "(" ")" "." "1" "=" `"'"' "___" "__" " 
ds, not(varlab "") // <-- This will only select those vars with varlabs // 
foreach v in `r(varlist)' { 
    local `v'l "`:var lab `v''" 
    **variables names cannot have spaces or other symbols, so:: 
     foreach s in `chars' { 
    local `v'l: subinstr local `v'l "`s'" "_", all 
       } 
    rename `v' ``v'l' 
    **make the variable names all lower case** 
    cap rename ``v'l' `=lower("``v'l'")' 
     } 
desc 
****************! END EXAMPLE 

Sie auch einen Blick auf Stat Transfer sehen könnte, und es ist Fähigkeiten in Konvertieren von Stata in R Datendateien.

+0

Danke für die Hilfe Eric. Ich kenne Stata nicht annähernd so gut wie R (wie ich es überhaupt nicht weiß), also war ich bereits mit der obigen Lösung gegangen. – Jared

3

Hier ist eine Funktion jeden Ausdruck bewerten Sie mit Stata-Variablenlabels wollen:

#' Function to prettify the output of another function using a `var.labels` attribute 
#' This is particularly useful in combination with read.dta et al. 
#' @param dat A data.frame with attr `var.labels` giving descriptions of variables 
#' @param expr An expression to evaluate with pretty var.labels 
#' @return The result of the expression, with variable names replaced with their labels 
#' @examples 
#' testDF <- data.frame(a=seq(10),b=runif(10),c=rnorm(10)) 
#' attr(testDF,"var.labels") <- c("Identifier","Important Data","Lies, Damn Lies, Statistics") 
#' prettify(testDF, quote(str(dat))) 
prettify <- function(dat, expr) { 
    labels <- attr(dat,"var.labels") 
    for(i in seq(ncol(dat))) colnames(dat)[i] <- labels[i] 
    attr(dat,"var.labels") <- NULL 
    eval(expr) 
} 

Sie können dann prettify(testDF, quote(table(...))) oder was auch immer Sie wollen.

Weitere Informationen finden Sie unter this thread.

+1

Interessante Funktion. Ich denke, ich werde für den Teil "Lies, Damn Lies" stimmen. – A5C1D2H2I1M1N2O1R2T1

+0

@AnandaMahto Nicht viel von einem Osterei, aber es ist etwas .... –

4

Ich würde empfehlen, dass Sie die neue haven package (GitHub) für den Import Ihrer Daten verwenden.

Wie Hadley Wickham erwähnt im README.md file:

Sie immer einen Datenrahmen erhalten, Datum Zeiten entsprechenden R-Klassen umgewandelt werden und markierte Vektoren werden als neue markierte Klasse zurückgegeben.Sie können leicht Faktoren erzwingen oder markierte Werte durch fehlende ersetzen. Wenn Sie auch dplyr verwenden, werden Sie feststellen, dass große Datenrahmen auf bequeme Weise gedruckt werden.

(Hervorhebung von mir)

Wenn Sie RStudio verwenden diese automatisch die Etiketten unter Variablennamen in dem View("data.frame") Anzeigebereich (source) anzuzeigen.

Variablenbeschriftungen werden als Attribut an jede Variable angehängt. Diese werden nicht gedruckt (weil sie eher lang sind), aber wenn Sie eine Vorschauversion von RStudio haben, werden Sie sie im überarbeiteten Viewer-Fenster sehen.

können Sie das Paket installieren mit:

install.packages("haven") 

und importieren Sie Ihr Stata Datum mit:

read_dta("path/to/file") 

Für weitere Informationen siehe:

help("read_dta") 
+0

Das Port-Paket ist großartig. Es erinnert mich auch daran, wie hilfreich Datenbeschriftungen in Stata waren, die ich seit Jahren nicht mehr benutzt habe. Ich frage mich, ob es R-Pakete gibt, die die Erstellung von Datenlabels erleichtern. Ich weiß, dass ich es mit attr machen könnte, aber ich würde es lieber mit einer netten, benutzerfreundlichen Syntax machen. –

+1

Ich denke, das tibble-Paket richtig? –

+0

Ja, die tibbles pacakge hat einen beschrifteten tibble typ! Bestätigt! –