将Stata中的值用于R数据。框,但显示标签而不是值 [英] Use values from Stata to R data.frame but show labels instead of values

查看:22
本文介绍了将Stata中的值用于R数据。框,但显示标签而不是值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是R的新手,更习惯Stata

我设法使用library(foreign)将数据库从Stata读取到Rdata.frame

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

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

让我再解释一下。假设我想操作一个名为"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
但在我导入的Rdata.frame中,标签是作为因子导入的。与每个因素相关联的级别不一定与我的Stata值相对应,因为它从1重新开始。同时,我不能使用级别来操作我的变量。如果我想从我的数据集中删除标签低于高中学历的人员,我必须写下整个标签:

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

一点也不方便,尤其是标签又长又复杂的时候。

是否可以像Stata中那样操作,即:在编辑数据时操作数值。考虑到我的数据是从Stata中导出的,使用标签框?

提前感谢您。

推荐答案

您可以从两个方向处理此问题:1.您可以在将数据导入R之前从Stata中删除值标签,或者2.您可以更改数据的数据导入设置。从R中框。这两种方法中哪一种更容易,在一定程度上将取决于您拥有的Stata版本和数据的格式。

选项1:

如果您想在Stata中这样做,我建议您首先阅读并可能安装来自SSC:sac inst labutil的"标签实用程序"包。在许多其他非常有用的标签操作工具中,该包包含labdtch或"Label Detach"命令,该命令将在Stata数据中将您的值标签与其实际值分离。显然,您需要在将数据导入R之前完成所有这些操作。

选项2:

如果您的数据是使用Stata版本13保存的,则R包将为您节省时间和精力。阅读有关该包的信息: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中执行的操作。

这篇关于将Stata中的值用于R数据。框,但显示标签而不是值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆