如何使用R将因子变量转换为数字变量
我还有一个问题,希望你能帮助我。我已经在谷歌上搜索过了,问过一个朋友,并试图了解这个网站上类似的问题,但我还是不明白 好的,我的问题是: 我有一个涵盖1980-2012年数据的大型数据集。 我使用read.spss函数将数据输入R如何使用R将因子变量转换为数字变量,r,variables,numeric,type-conversion,recode,R,Variables,Numeric,Type Conversion,Recode,我还有一个问题,希望你能帮助我。我已经在谷歌上搜索过了,问过一个朋友,并试图了解这个网站上类似的问题,但我还是不明白 好的,我的问题是: 我有一个涵盖1980-2012年数据的大型数据集。 我使用read.spss函数将数据输入R rohdaten <-read.spss("C:\\Users\\xxxxxxx.sav", use.value.labels = TRUE, to.data.frame = TRUE, max.value.labels = Inf, trim.
rohdaten <-read.spss("C:\\Users\\xxxxxxx.sav", use.value.labels = TRUE, to.data.frame = TRUE,
max.value.labels = Inf, trim.factor.names = FALSE,
trim_values = TRUE, reencode = NA, use.missings = TRUE)
现在我似乎有avgEconRat对象中的数据,但首先,我不确定我的平均值是否正确,其次,这是主要问题,我现在如何引用我的数据来绘制它
p1 <- ggplot(na.action=na.exclude, rohdaten, aes(v14, v2))
p1 + geom_point(aes(color = v652), alpha = 0.6) +
facet_grid(. ~ v5)
p1首先,以下是为什么在转换为数字之前必须转换为字符:
假设我们有一个因子,它包含一些数字
x = factor(c(1,2,7,7))
您可以检查这是如何在R中表示的,如下所示:
unclass(x)
#> [1] 1 2 3 3
#> attr(,"levels")
#> [1] "1" "2" "7"
您将看到有3个级别,这些值表示为这3个级别的索引。此外,如果直接将调用为.numeric()
,则得到的是索引向量,而不是希望得到的值:
as.numeric(x)
#> [1] 1 2 3 3
另一方面,如果您有likert量表,并且因子级别的顺序正确:
f = factor(c("agree","agree","somewhat agree","somewhat agree","somewhat disagree","disagree","disagree"))
levels(f)
#> [1] "agree" "disagree" "somewhat agree" "somewhat disagree"
实际上,您可能需要索引:
#> as.numeric(f)
[1] 1 1 3 3 4 2 2
但是,如果您的级别出现问题,如:
f = factor(sample(c("agree","somewhat agree","somewhat disagree","disagree"),
20,
TRUE))
levels(f)
#> [1] "agree" "disagree" "somewhat agree" "somewhat disagree"
然后,您不需要将调用为.numeric(as.character(f))
(在本例中没有意义),而是需要对因子级别重新排序,然后调用为.numeric,如下所示:
as.numeric(factor(f,
# specifify the levels in the correct order:
levels=c("agree","somewhat agree","somewhat disagree","disagree"))
我在1988-2012年的数据集上遇到了类似的问题,但我试图将变量的名称改为数字。在尝试了几个小时的不同组合后——我对R也很陌生——我发现了以下解决方案
起初,我是这样做的:
这需要“plyr”包
库(plyr)
我的.data2$islamic_leviathan_分数没有帮助?如果没有数据集,很难说出在您的具体案例中会发生什么。看起来至少有一个值看起来不像是R的数字。这个答案是一个很好的关于有序数据中因子使用的教程。而那个unclass
的东西对我来说是新的,看起来很方便。谢谢谢谢你的帮助-只是花了一段时间O:-)
#> as.numeric(f)
[1] 1 1 3 3 4 2 2
f = factor(sample(c("agree","somewhat agree","somewhat disagree","disagree"),
20,
TRUE))
levels(f)
#> [1] "agree" "disagree" "somewhat agree" "somewhat disagree"
as.numeric(factor(f,
# specifify the levels in the correct order:
levels=c("agree","somewhat agree","somewhat disagree","disagree"))
library(plyr)
my.data2$islamic_leviathan_score <- revalue(my.data2$islamic_leviathan,
c("(1) Very Suitable"="3", "(2) Suitable"="2", "(3) Somewhat Suitable"="1", "(4) Not Suitable At All"="-1"))
my.data2$islamic_leviathan <- c("3", "2", "1", "-1")
my.data2$islamic_leviathan_score <- as.factor(my.data2$islamic_leviathan)
my.data2$islamic_leviathan_score
my.data2$islamic_leviathan_score_1 <-as.numeric(as.character(my.data2$islamic_leviathan_score))
my.data2$islamic_leviathan_score_1
library(plyr)
my.data2$islamic_leviathan_score <- revalue(my.data2$islamic_leviathan,
c("(1) Very Suitable"="3", "(2) Suitable"="2", "(3) Somewhat Suitable"="1", "(4) Not Suitable At All"="-1"))
my.data2$islamic_leviathan_score_1 <- as.numeric(as.character(my.data2$islamic_leviathan_score))