2010-01-27 47 views
14

tôi có một loạt các file Stata .dta mà tôi muốn sử dụng trong R.Sử dụng Stata Nhãn biến trong R

Vấn đề của tôi là các tên biến là không hữu ích cho tôi vì họ là như "q0100, "" q0565, "" q0500, "và" q0202 ". Tuy nhiên, chúng được dán nhãn như "psu", "số lượng mang thai", "chủ hộ gia đình" và "điểm tham chiếu".

Tôi muốn có thể lấy nhãn ("psu", "điểm tham chiếu", v.v.) và sử dụng chúng làm tên biến/cột của tôi vì chúng sẽ dễ dàng hơn để tôi làm việc.

Có cách nào để thực hiện điều này, tốt nhất là trong R hoặc thông qua Stata không? Tôi biết read.dta trong thư viện (nước ngoài) nhưng không biết nếu nó có thể chuyển đổi các nhãn thành tên biến.

+0

không phải ở máy tính hiện nay , nhưng i hmisc mỏng có chức năng nhập nhãn từ spss. có thể làm việc với stata quá? – Andreas

+0

Tôi biết điều này là rất cũ, nhưng có một cái nhìn dưới đây nếu giải pháp thiên đường của tôi hoạt động. –

Trả lời

18

R không có cách tích hợp để xử lý các nhãn biến. Cá nhân tôi nghĩ rằng đây là bất lợi mà nên được cố định. Hmisc cung cấp một số điều kiện cho các nhãn biến hadling, nhưng các nhãn chỉ được nhận ra bởi các hàm trong gói đó. read.dta tạo một data.frame với thuộc tính "var.labels" chứa thông tin ghi nhãn. Sau đó bạn có thể tạo một từ điển dữ liệu từ đó.

> 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 

Tất nhiên tệp .dta này không có nhãn rất thú vị nhưng bạn nên có ý nghĩa hơn.

+0

Cảm ơn, tôi đã gặp phải sự cố về điều đó tại http://stat.ethz.ch/R-manual/R-patched/library/foreign/html/read.dta.html Nhưng tôi đã sử dụng > các thuộc tính (a) $ var.labels Sau đó, tôi có thể sử dụng ý tưởng data.key bạn đã có và xây dựng một hàm đặt lại tên biến như vậy. Cảm ơn bạn lần nữa. – Jared

+0

chắc chắn, nhưng các nhãn biến có thể khá tiết và chứa các ký tự không được khuyến khích sử dụng cho các tên biến. –

+0

Có đúng là không có cách nào để lưu trữ nhãn biến trong R? – Heisenberg

3

Bạn có thể chuyển đổi các nhãn biến thành tên biến từ bên trong Stata trước khi xuất nó sang tệp R hoặc tệp văn bản.
Như Ian đề cập, nhãn biến thường không tạo tên biến tốt, nhưng nếu bạn chuyển đổi dấu cách và ký tự khác thành dấu gạch dưới và nếu nhãn biến không quá dài, bạn có thể gắn nhãn lại vars bằng varlabels khá dễ dàng. Dưới đây là một ví dụ sử dụng bộ dữ liệu Stata sẵn có "cancer.dta" để thay thế tất cả các tên biến bằng nhãn var - quan trọng, mã này sẽ không cố gắng đổi tên biến không có nhãn biến. Lưu ý rằng tôi cũng đã chọn tập dữ liệu có nhiều ký tự không hữu ích khi đặt tên biến (ví dụ: =, 1, ',.,(), V.v. ... bạn có thể thêm bất kỳ ký tự nào có thể ẩn trong nhãn biến của bạn vào danh sách ở dòng thứ 5: "chars địa phương" ..."" và nó sẽ làm cho những thay đổi dành cho bạn:

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

bạn cũng có thể xem xét tham gia một cái nhìn tại Stat Transfer và đó là khả năng trong chuyển đổi các tệp dữ liệu Stata thành R.

+0

Cảm ơn sự giúp đỡ của Eric. Tôi không biết Stata gần như cũng như R (như không biết chút nào) vì vậy tôi đã đi với giải pháp trên. – Jared

3

Dưới đây là một chức năng để đánh giá bất kỳ biểu hiện nào bạn muốn với nhãn biến 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) 
} 

Bạn có thể sau đó prettify(testDF, quote(table(...))) hay bất cứ điều gì bạn muốn.

Xem this thread để biết thêm thông tin.

+1

Chức năng thú vị. Tôi nghĩ tôi sẽ bỏ phiếu cho phần "Lies, Damn Lies". – A5C1D2H2I1M1N2O1R2T1

+0

@AnandaMahto Không có nhiều quả trứng Phục sinh, nhưng đó là một cái gì đó .... –

4

Tôi khuyên bạn nên sử dụng haven package (GitHub) mới để nhập dữ liệu của mình.

Như Hadley Wickham đề cập trong README.md file:

Bạn luôn có được một khung dữ liệu, thời gian ngày được chuyển đến các lớp học R tương ứng và vectơ dán nhãn được trả về như lớp dán nhãn mới.Bạn có thể dễ dàng ép buộc các yếu tố hoặc thay thế các giá trị được gắn nhãn bằng các từ khóa phù hợp. Nếu bạn cũng sử dụng dplyr, bạn sẽ nhận thấy rằng các khung dữ liệu lớn được in một cách thuận tiện.

(tôi nhấn mạnh)

Nếu bạn sử dụng RStudio này sẽ tự động hiển thị các nhãn dưới tên biến ở khung bên View("data.frame") viewer (source).

Nhãn biến được gắn dưới dạng thuộc tính cho từng biến. Chúng không được in (vì chúng có xu hướng dài), nhưng nếu bạn có phiên bản xem trước của RStudio, bạn sẽ thấy chúng trong ngăn người xem đã được sửa lại.

Bạn có thể cài đặt các gói sử dụng:

install.packages("haven") 

và nhập ngày Stata bạn sử dụng:

read_dta("path/to/file") 

Để biết thêm thông xem:

help("read_dta") 
+0

Gói thiên đường tuyệt vời. Nó cũng nhắc tôi làm thế nào nhãn dữ liệu hữu ích trong Stata, mà tôi đã không sử dụng trong nhiều năm. Tôi tự hỏi nếu có R gói ra có tạo thuận lợi cho việc tạo ra các nhãn dữ liệu. Tôi biết tôi có thể làm điều đó với attr, nhưng tôi muốn có nó được thực hiện với một cú pháp tốt đẹp, thân thiện với người dùng. –

+1

Tôi đoán gói phần mềm tibble đúng không? –

+0

Có, các tibbles pacakge có một loại tibble dán nhãn! Đã xác nhận! –

Các vấn đề liên quan