在R中加载stata .dta文件并进行数据分析

时间:2016-01-14 23:38:16

标签: r loading stata categorical-data

主要问题是数据加载了因子,但如果我关闭因子,所有数字都会改变。数据集位于https://www.dropbox.com/s/71se6zo5ucqki8v/yrbs2013.dta?dl=0

由于最后的“岁月”,我不能对此进行数据分析。但是,在stata中,它似乎忽略了最后的“岁月”输出,数据很容易操作。我的问题:如何将这些基于因子的文本变量从“14岁”转换为“14”的数值,以便我可以进行数据分析

library(foreign)
yrbs=read.dta('yrbs2013.dta',convert.factors = T)
head(yrbs$Q1)
[1] 14 years old 14 years old 15 years old 15 years old 15 years old 15 years old
7 Levels: 12 years old or younger 13 years old 14 years old ... 18 years old or older

以下是关闭因子的输出。所有的数字都被重新编码,并且采用这种方法会产生毫无意义的结果。

yrbs=read.dta('yrbs2013.dta',convert.factors = F)
head(yrbs$Q1)
[1] 3 3 4 4 4 4   

我还尝试将数据集转换为csv,然后出现同样的问题。我试图避免复杂的正则表达式拆分和运行as.numeric(),因为我不想对整个数据集执行此操作。

2 个答案:

答案 0 :(得分:4)

您可以简单地将字段作为文本阅读并使用它们:

yrbs <- read.dta('yrbs2013.dta')
yrbs$Q1 <- with(yrbs, as.integer(gsub("[^0-9]", "", Q1)))

> with(yrbs, table(Q1))
Q1
  12   13   14   15   16   17   18 
  26   18 1368 3098 3203 3473 2320 

请注意,这会导致信息丢失 - 实际上,1218值原来是&#34; 12岁或更小的&#34;和&#34; 18岁或以上&#34;分别。不确定你想做什么。

答案 1 :(得分:1)

我似乎无法重现你在Stata中所描述的内容。在Stata中打开文件表明Stata只有两个这个变量的表示

  • 作为标签
  • 作为整数值1:7

为了说服自己,在Stata中尝试输入以下内容

generate Q1n = Q1 +0

似乎Stata实际上并没有将变量存储在12:18的任何位置 - 这可能是Stata可能以似乎的方式截断标签,就好像这个变量一样被存储为12:18。

我敢打赌MichaelChirico的回答证明了唯一可行的方法。

我重申这个变量不是数字:它是有序的,因为18类真的是&gt; = 18而12类真的是&lt; = 12这可能是也可能不是问题,但是你应该知道你将一个有序的分类强制转换为数字变量。