主要问题是数据加载了因子,但如果我关闭因子,所有数字都会改变。数据集位于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()
,因为我不想对整个数据集执行此操作。
答案 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
请注意,这会导致信息丢失 - 实际上,12
和18
值原来是&#34; 12岁或更小的&#34;和&#34; 18岁或以上&#34;分别。不确定你想做什么。
答案 1 :(得分:1)
我似乎无法重现你在Stata中所描述的内容。在Stata中打开文件表明Stata只有两个这个变量的表示
为了说服自己,在Stata中尝试输入以下内容
generate Q1n = Q1 +0
似乎Stata实际上并没有将变量存储在12:18的任何位置 - 这可能是Stata可能以似乎的方式截断标签,就好像这个变量一样被存储为12:18。
我敢打赌MichaelChirico的回答证明了唯一可行的方法。
我重申这个变量不是数字:它是有序的,因为18类真的是&gt; = 18而12类真的是&lt; = 12这可能是也可能不是问题,但是你应该知道你将一个有序的分类强制转换为数字变量。