将stata文件导入到R中,变量必须使用标签进行过滤,而不是实际的数值

问题描述:

我有一个关于将STATA文件导入R的非常基本的问题,我尝试搜索论坛,但找不到我在找的内容。将stata文件导入到R中,变量必须使用标签进行过滤,而不是实际的数值

我有一个DHS文件(AR - HIV测试结果),它只是有几个字段,如下所示,使用外包导入到后R:

AR_HIV_dataset <- read.dta("RWAR71FL.DTA") #HIV test result file 

我的问题是关于如何筛选某些情况下,与dplyr基于一个变量的值例如HIV03。使用结构命令,变量HIV03显示为“HIV阴性”,“HIV阳性”等:

$ hiv03:具有8个水平的因子“hiv阴性”,..:1 1 1 1 1 1 1 1 1 1 ...

但实际存储的数据值只是0或1.但是,我不能引用这些数值,因为过滤器命令似乎需要我指定标签值,例如

filter(AR_HIV_dataset,hiv03=="hiv negative") 

这将返回所需的情况,但我想可以使用下面的命令来代替(使用实际值)

filter(AR_HIV_dataset, hiv03==0) 

但如果我这样做,这将返回一个错误。

你能让我知道我需要改变什么才能使用第二行代码吗?

在此先感谢您的支持。

+0

嗨,你能提供一个输出说明以下语句**“...但实际的数据值存储为0或1“**。 – ANG

+0

非常感谢,让我试试可能是解决方案的避风港套餐。 –

+0

亲爱的markdly,谢谢 - 我用避风港,而它的工作现在列hiv03现在显示值0或1,而不是“hiv负面”,“hiv ...”等。非常感谢。我无法找到一个按钮来投票这个答案?再次感谢 –

使用haven包(http://haven.tidyverse.org/)导入STATA文件可能会有所帮助,特别是如果你正在使用dplyr都给出包是tidyverse的一部分。 vignette on semantics可能会特别有用,当查看如何处理stata等变量时导入到R.

两个可能的解决方案是:

filter(AR_HIV_dataset, as.numeric(hiv03)==0) 

或者,有些更好的

filter(AR_HIV_dataset, hiv03 == levels(hiv03)[1]) 
+0

谢谢你的回应。我尝试过,但它似乎并没有工作。 –

+0

非常感谢用户429791,我试过但没有工作(我没有解释我自己,我不这么认为),但是现在我找到了一个使用天堂的解决方案,所以让我们来看看。再次感谢。 –