gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:47:14 25 4
gpt4 key购买 nike

我是 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)

Values(在 Stata 语言的意义上)不会被导入,只有 labels 被导入。

让我再解释一下。假设我想操纵一个名为“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 中那样做,即:在使用标签编辑 data.frame 的同时操作数值?

在此先感谢您。

最佳答案

您可以从两个方向解决这个问题:1. 您可以在将数据导入 R 之前从 Stata 中删除值标签,或者 2. 您可以从 R 中更改 data.frame 的数据导入设置。这两条 route 哪一条更容易在某种程度上取决于您拥有的 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 中执行的操作。

关于r - 使用从 Stata 到 R data.frame 的值,但显示标签而不是值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38639538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com