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