问题描述
我是R
的新手,更习惯Stata
。
library(foreign)
将数据库从Stata
读取到R
data.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
但在我导入的R
data.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数据。框,但显示标签而不是值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!