2010-01-27 25 views
14

que tienen un montón de archivos de Stata .dta que me gustaría usar en R.utilizando Stata etiquetas de variable en R

Mi problema es que los nombres de las variables no son útiles para mí, ya que son como "q0100, "" q0565, "" q0500, "y" q0202 ". Sin embargo, están etiquetados como "psu", "número de embarazadas", "cabeza de familia" y "punto de referencia".

Me gustaría poder tomar las etiquetas ("psu", "waypoint", etc.) y usarlas como mis nombres de variable/columna, ya que me será más fácil trabajar con ellas.

¿Hay alguna manera de hacerlo, preferiblemente en R o a través de Stata? Sé de read.dta en la biblioteca (extranjera) pero no sé si puede convertir las etiquetas en nombres de variables.

+0

en el equipo ahora , pero mi thin hmisc tiene una función para importar etiquetas de spss. podría funcionar con stata también? – Andreas

+0

Sé que esto es muy antiguo, pero echar un vistazo a continuación si mi solución funciona refugio. –

Respuesta

18

R no tiene una forma integrada para manejar etiquetas variables. Personalmente creo que esto es una desventaja que debería ser corregida. Hmisc proporciona cierta facilidad para manejar etiquetas variables, pero las etiquetas solo son reconocidas por funciones en ese paquete. read.dta crea un data.frame con un atributo "var.labels" que contiene la información de etiquetado. A continuación, puede crear un diccionario de datos a partir de eso.

> 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 

Por supuesto, este archivo .dta no tiene etiquetas muy interesantes, pero las suyas deberían ser más significativas.

+0

Gracias, yo había sólo una especie de tropezado con que al http://stat.ethz.ch/R-manual/R-patched/library/foreign/html/read.dta.html Pero utilizado > atributos (a) $ var.labels entonces puedo usar la idea que tenía data.key y construir una función que cambia el nombre de las variables como tal. Gracias de nuevo. – Jared

+0

etiquetas seguras, pero variables pueden ser bastante detallado y contener caracteres que no son recomendable utilizar para los nombres de las variables. –

+0

¿Sigue siendo cierto que no hay forma de almacenar etiquetas variables en R? – Heisenberg

3

Puede convertir las etiquetas de variable a nombres de variable desde Stata antes de exportarlo a un archivo R o de texto.
Como Ian menciona, las etiquetas variables generalmente no son buenas para las variables, pero si convierte los espacios y otros caracteres en guiones bajos y si las etiquetas variables no son demasiado largas, puede volver a etiquetar sus vars con los varlabels con bastante facilidad.

A continuación se muestra un ejemplo que usa el conjunto de datos Stata "cancer.dta" para reemplazar todos los nombres de variables con etiquetas var; importante, este código no intentará cambiar el nombre de la variable sin etiquetas de variables. Tenga en cuenta que también seleccioné un conjunto de datos donde hay muchos caracteres que no son útiles para nombrar una variable (por ejemplo: =, 1, ',.,(), Etc.) ... puede agregar cualquier carácter que pueda estar al acecho en sus etiquetas de variable a la lista de la línea 5: "caracteres locales" ..."" y que hará que los cambios para usted:

****************! 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 

también podría considerar la adopción de un vistazo a Stat Transfer y sus capacidades en convirtiendo Stata a R archivos de datos.

+0

Gracias por la ayuda Eric. No sé Stata casi tan bien como R (como si no lo supiera en absoluto), así que ya me había ido con la solución anterior. – Jared

3

Aquí es una función para evaluar cualquier expresión que desee con las etiquetas de variable Stata:

#' 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) 
} 

A continuación, puede prettify(testDF, quote(table(...))) o lo que usted desee.

Consulte this thread para obtener más información.

+1

Función interesante. Creo que lo votaré por la parte "Mentiras, Maldita Mentira". No – A5C1D2H2I1M1N2O1R2T1

+0

@AnandaMahto gran parte de un huevo de Pascua, pero es algo .... –

4

Yo recomendaría que utilice el nuevo haven package (GitHub) para importar sus datos.

Como se menciona en el Hadley WickhamREADME.md file:

Siempre una trama de datos, los tiempos fecha se convierten en correspondientes clases R y vectores etiquetados se devuelven como nueva clase etiquetada.Puede coaccionar fácilmente a los factores o reemplazar los valores etiquetados con errores según corresponda. Si también usa dplyr, notará que los marcos de datos grandes se imprimen de manera conveniente.

(el énfasis es mío)

Si utiliza este RStudio mostrará automáticamente las etiquetas bajo los nombres de variables en el panel View("data.frame") espectador (source).

Las etiquetas de variables se adjuntan como un atributo a cada variable. Estos no se imprimen (ya que tienden a ser larga), pero si usted tiene una versión preliminar de rstudio, los verás en el panel del visor renovada.

Puede instalar el paquete usando:

install.packages("haven") 

e importar su fecha de Stata usando:

read_dta("path/to/file") 

Para más información ver:

help("read_dta") 
no
+0

El paquete refugio es grande. También me recuerda cómo las etiquetas de datos útiles estaban en Stata, que no he usado en años. Me pregunto si hay paquetes R que faciliten la creación de etiquetas de datos. Sé que podría hacerlo con Attr, pero preferiría hacerlo con una sintaxis agradable y fácil de usar. –

+1

Supongo que el paquete tibble ¿verdad? –

+0

¡Sí, el pacakge de tibbles tiene un tipo de tibble etiquetado! ¡Confirmado! –

Cuestiones relacionadas