【问题标题】:Save variable labels in R so that Stata can read them在 R 中保存变量标签,以便 Stata 可以读取它们
【发布时间】:2019-10-08 14:34:23
【问题描述】:

我有一个包含多个 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 并恢复标签的方式保存数据?

【问题讨论】:

  • 标准 CSV 文件无法保存标签。您可以使用saveRDS 将R 中的对象以二进制格式保存,这将保留标签,但您无法将其读入Stata。也许您可以将标签保存在单独的文件中并在每个程序中合并。

标签: r label stata data-management


【解决方案1】:

这有点棘手。您需要标记所有变量。如果您不想标记变量,您可能仍需要输入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 14Rforeign

【讨论】:

  • 我想知道有没有办法自动将空标签分配给那些我没有专门为其赋值的变量?我的数据集有 700 多个变量,我只需要标记那些最相关的变量。 attr(df, "var.labels") &lt;- c(var1 = "label 1", var2 = "label 2" , var4="label 4") 之类的东西,然后告诉 r 自动将 "" 分配给其余变量
【解决方案2】:

您可以将数据框的列名设置为可用的标签:

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

【讨论】:

  • 谢谢你,但这不是我真正想要的,我希望我的变量名易于访问,然后保存标签,这样当我对数据有疑问时,我知道什么它是关于。
猜你喜欢
  • 1970-01-01
  • 2015-06-25
  • 2011-01-10
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多