Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.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
数值转换中的as.factor()_R_Type Conversion - Fatal编程技术网

数值转换中的as.factor()

数值转换中的as.factor(),r,type-conversion,R,Type Conversion,所以我现在正在学习R,我从许多来源注意到,每当我们想要将数据类型转换为数值时,我们使用两个函数as.numeric()和as.factor() 例如,如果我想将列Year转换为数字,它将是 as.numeric(as.factor(survey.data$Year)) 我试着单独使用作为.numeric(),而且效果也很好。但我觉得这样做会让我错过一些东西。我只是想知道为什么要先转换成因子,然后再转换成数值 谢谢。我不认为你遗漏了什么。要了解的主要内容是R如何转换数据类型,三种常见的类型是数字

所以我现在正在学习R,我从许多来源注意到,每当我们想要将数据类型转换为数值时,我们使用两个函数
as.numeric()
as.factor()

例如,如果我想将列Year转换为数字,它将是

as.numeric(as.factor(survey.data$Year))
我试着单独使用
作为.numeric()
,而且效果也很好。但我觉得这样做会让我错过一些东西。我只是想知道为什么要先转换成因子,然后再转换成数值


谢谢。

我不认为你遗漏了什么。要了解的主要内容是R如何转换数据类型,三种常见的类型是
数字
字符
因子
。到目前为止(在我看来),这些因素是来自其他语言的最不直观的因素

我喜欢将这些因素视为“类别”。它们没有顺序(不同于可以按字母顺序排列的字符)。它们是用于列出内容的抽象数据类型。其他人可能不同意这一解释,但这有助于我理解

我说因素没有顺序,这是一种简单的谎言。事实证明,这些因素也有
级别
。级别列出事物的顺序。假设我们有一个向量

animals <- factor(c("Rabbit", "Cat", "Dog"))
它将导致
c(3,1,2)
。这是因为numeric将因子转换为一个整数,表示它们的级别顺序

如果要将因子(如“1”)转换为数字1,则必须先将其转换为字符,然后再转换为数字

这是因为因子和整数之间的转换具有这种行为。但是从因子到字符的转换去掉了构成因子的字母。然后,从字符到数字的转换将数字字符转换为实际数字


回到你的例子,我认为只使用
作为.numeric
是可以的,除非你想得到表示因子等级顺序的数字。

如果你想将列Year转换为数值,也许你想的是将因子转换为数值的必要过程,必须首先将其转换为字符

您可以对数据帧和列子集执行相同的操作,但这里我创建了一个简单的示例:

#Create a factor vector called Year with 3 levels
    Year <- factor(c(2001, 2001, 2001, 2004, 2004, 2020, 2020))
    Year
    [1] 2001 2001 2001 2004 2004 2020 2020
    Levels: 2001 2004 2020 
要正确地将因子转换为数字并真正返回原始向量值,请先转换为字符,然后再转换为数字,您可以使用嵌套函数执行此操作,因为R从最里面的括号开始,并按操作顺序向外工作:

#Correct: convert Year into a character, then into numeric
    num.Year <- as.numeric(as.character(Year))
    num.Year
    [1] 2001 2001 2001 2004 2004 2020 2020
#正确:将年份转换为字符,然后转换为数字

num.Year不确定你是从哪里学到这一点的,但通常情况下,它不会给你想要的结果。请提供一个可复制的示例和所需结果,以便我们能更好地帮助您。
as.numeric(c(“1900”、“1850”、“1875”)
给出了
[1]1900 1850 1875
<代码>作为数字(作为系数(c(“1900”、“1850”、“1875”))
给出
[1]3 1 2
。所以我想这取决于你是想把年份作为一个整数,还是一个用顺序表示年份的整数。正如@RichScriven所指出的,第二个操作看起来确实很奇怪。
#Incorrect: convert Year into numeric directly
    nope.Year <- as.numeric(Year)
    nope.Year
    [1] 1 1 1 2 2 3 3
#Correct: convert Year into a character, then into numeric
    num.Year <- as.numeric(as.character(Year))
    num.Year
    [1] 2001 2001 2001 2004 2004 2020 2020