在 R 中保存变量标签,以便 Stata 可以读取它们
Save variable labels in R so that Stata can read them
我有一个包含超过 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 的方式保存数据?
您可以将数据框的名称设置为可用的标签:
colnames(df)[which(!is.na(label(df)))]<-as.character(label(df)[which(!is.na(label(df)))])
有点棘手。您需要标记所有变量。如果你不想给一个变量加标签,你可能还是需要放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
我有一个包含超过 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 的方式保存数据?
您可以将数据框的名称设置为可用的标签:
colnames(df)[which(!is.na(label(df)))]<-as.character(label(df)[which(!is.na(label(df)))])
有点棘手。您需要标记所有变量。如果你不想给一个变量加标签,你可能还是需要放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