在 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
请注意,这构成了信息丢失——实际上值 12
和 18
最初分别是“12 岁或以下”和“18 岁或以上”。不确定那是你想要做的。
我似乎无法重现您在 Stata 中描述的内容。在Stata中打开文件显示Stata只有这个变量的两种表示
- 作为标签
- 作为整数值1:7
为了让自己相信这一点,请在 Stata 中尝试输入以下内容
generate Q1n = Q1 +0
似乎 Stata 实际上并没有将变量存储为 12:18 任何地方——Stata 可能以 看起来 的方式截断了标签如果此变量存储为 12:18。
我敢打赌,MichaelChirico 的回答中展示了唯一可能的方法。
我要重申这个变量不是数字:它是分类排序的,因为 18 类别实际上是 >=18 而 12 类别实际上是 <=12 这可能是也可能不是问题,但你应该请注意,您正在将有序分类强制转换为数字变量。
主要问题是数据加载了因子,但如果我关闭因子,所有数字都会改变。数据集在这里 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
请注意,这构成了信息丢失——实际上值 12
和 18
最初分别是“12 岁或以下”和“18 岁或以上”。不确定那是你想要做的。
我似乎无法重现您在 Stata 中描述的内容。在Stata中打开文件显示Stata只有这个变量的两种表示
- 作为标签
- 作为整数值1:7
为了让自己相信这一点,请在 Stata 中尝试输入以下内容
generate Q1n = Q1 +0
似乎 Stata 实际上并没有将变量存储为 12:18 任何地方——Stata 可能以 看起来 的方式截断了标签如果此变量存储为 12:18。
我敢打赌,MichaelChirico 的回答中展示了唯一可能的方法。
我要重申这个变量不是数字:它是分类排序的,因为 18 类别实际上是 >=18 而 12 类别实际上是 <=12 这可能是也可能不是问题,但你应该请注意,您正在将有序分类强制转换为数字变量。