Сохранить метки переменных - PullRequest
0 голосов
/ 08 октября 2019

У меня есть набор данных с более чем 170 переменными, который выглядит следующим образом:

df <- data.frame(var1 = 1:3, var2 = 2:4, var3 = 2:4, var4 = 2:4, var5 = 2:4)

Я вручную добавил значения переменных, используя Hmisc:

library(Hmisc)
var.labels = c(var1 = "label 1",
               var3 = "label 2",
               var4="label 4" )
label(df) = as.list(var.labels[match(names(df), names(var.labels))])              

Обратите внимание, чтоне все переменные имеют метки и что мне гораздо проще указывать метки переменных по имени (var*), чем по положению, учитывая мое большое количество столбцов.

Проблема в том, что при сохранении набора данных с помощью write.csv(df,"df.csv") или write.dta(df,"df.dta") метки переменных теряются.

Как сохранить данные таким образом, чтобы их можно было повторно импортировать в R и Stata с восстановленными метками?

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Это немного сложно. Вам нужно пометить все переменные. Если вы не хотите маркировать переменную, вам все равно может потребоваться поставить variable = "". В противном случае write.dta будет игнорировать все метки переменных.

В R

df <- data.frame(var1 = 1:3, var2 = 2:4, var3 = 2:4, var4 = 2:4, var5 = 2:4)
attr(df, "var.labels") <- c(var1 = "label 1", var2 = "label 2", 
              var3 = "", var4="label 4", var5 = "")
foreign::write.dta(df, "dat_stata.dta")

В Stata вы получаете:

. des

Contains data from C:...dat_stata.dta
  obs:             3                          Written by R.              
 vars:             5                          
 size:            60                          
------------------------------------------------------------------------------------------------------
              storage   display    value
variable name   type    format     label      variable label
------------------------------------------------------------------------------------------------------
var1            long    %9.0g                 label 1
var2            long    %9.0g                 label 2
var3            long    %9.0g                 
var4            long    %9.0g                 label 4
var5            long    %9.0g                 
------------------------------------------------------------------------------------------------------
Sorted by: 

Обратите внимание: я использовал Stata 14 и R пакетforeign

0 голосов
/ 08 октября 2019

Вы можете установить имена столбцов данных для тех меток, которые доступны:

colnames(df)[which(!is.na(label(df)))]<-as.character(label(df)[which(!is.na(label(df)))])
...