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

Load a stata .dta file in R and do data analysis

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

由于最后的"years old",我无法对此进行数据分析。但是在stata中,似乎忽略了最后的"years old"输出,数据非常容易操作。我的问题:如何将这些基于因子的文本变量从“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(),因为我不想对整个数据集这样做。

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

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 最初分别是“12 岁或以下”和“18 岁或以上”。不确定那是你想要做的。

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

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

为了让自己相信这一点,请在 Stata 中尝试输入以下内容

generate Q1n = Q1 +0

似乎 Stata 实际上并没有将变量存储为 12:18 任何地方——Stata 可能以 看起来 的方式截断了标签如果此变量存储为 12:18。

我敢打赌,MichaelChirico 的回答中展示了唯一可能的方法。

我要重申这个变量不是数字:它是分类排序的,因为 18 类别实际上是 >=18 而 12 类别实际上是 <=12 这可能是也可能不是问题,但你应该请注意,您正在将有序分类强制转换为数字变量。