使用从Stata到R data.frame的值,但显示标签而不是值

时间:2016-07-28 14:38:21

标签: r import stata r-factor

我是R的新手,更习惯于Stata

我设法使用StataR读取数据库data.frame library(foreign)

data=read.dta("mydata.dta", 
     convert.dates = TRUE, 
     convert.factors = TRUE,
     missing.type = FALSE,
     convert.underscore = FALSE, 
     warn.missing.labels = TRUE)

(在Stata语言中)不会导入,只会导入标签

让我再解释一下。假设我想操纵一个名为“edu”的教育变量。在Stata语言中,我使用数值而不是标签来操作我的变量,数据编辑器显示标签,只要我定义了我的标签。例如,假设我的变量“edu”取值10到40,以下代码将标签与每个值相关联:

label define lib_edu 
10 "Less than high-school degree" 
20 "12th grade or higher, no college degree" 
30 "Undergraduate level (2 to 4 years of college)" 
40 "Graduate level (5 years of college or more)", add;
label values edu lib_edu;

然后,当我想操纵我的变量时,我需要使用这些值。例如,如果我想从我的数据集中删除标签低于高中学历的人,我只是这样做:

drop if edu==10

但是在我导入的R data.frame中,标签被导入为因子。每个因素都与一个级别相关联,这个级别不一定与我的Stata值相对应,因为它从1重新开始。同时,我不能使用级别来操纵我的变量。如果我想从我的数据集中删除标签低于高中学历的人,我必须写下整个标签:

data <- data[data$edu!="Less than high-school degree",]

这根本不方便,特别是当标签很长而且复杂时。

是否可以像在Stata中那样进行操作,即:在编辑带有标签的data.frame时操作数值,假设我的数据是从Stata导出的?

提前感谢你。

1 个答案:

答案 0 :(得分:1)

您可以从两个方向处理此问题:1。您可以在将数据导入R之前从Stata中删除值标签,或2.您可以从R中更改data.frame的数据导入设置。这两条路线中的哪一条更容易取决于您在哪种版本的Stata以及您的数据格式。

选项1:

如果您想在Stata中执行此操作,我建议您先阅读并尽可能安装SSC的“标签实用程序”包:sac inst labutil。此包中包含用于操作标签的许多其他非常有用的工具,labdtch或“label detach”命令,它将使您的值标签与Stata数据中的实际值分离。显然,在将数据导入R之前,您将完成所有这些操作。

选项2:

如果您的数据已使用Stata版本13保存,则R包readstata13将为您节省时间和精力。要了解该软件包:see its manual on CRAN

如果使用readstata13是一个选项,则需要将get.label和/或get.label.name命令组合使用,并将其用作get.origin.codes的输入你在寻找。

最后,如果不能使用readstata13,则应尝试在R中的导入命令中指定as.numeric(levels(f))[f]。有关原因和更多详细信息,请参阅此StackOverflow question

如果可能的话,我建议尝试通过R来实现这一点,因为它将提供更可重复的工作流程。但如果您最终通过Stata执行此操作,我会在您的R文件中包含一条简短的注释,说明您在导入数据之前在Stata中所做的操作。