Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用R将因子变量转换为数字变量_R_Variables_Numeric_Type Conversion_Recode - Fatal编程技术网

如何使用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.

我还有一个问题,希望你能帮助我。我已经在谷歌上搜索过了,问过一个朋友,并试图了解这个网站上类似的问题,但我还是不明白

好的,我的问题是: 我有一个涵盖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.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))