Reverting to Factor Codes R
问题的原因是当使用列名访问数据框中的列时,会得到一个因子向量,可以将其转换为数值。然而,数据框是一个列的列表,当在列表上使用单个数字和单个括号操作符时,会得到一个长度为一的列表。对于数据框也是如此,因此df.test[1]
会将第一列作为新的数据框返回,而不能通过as.numeric()
进行强制转换。我之前不知道这一点!
解决方法是使用双括号操作符df.test[[1]]
来访问列,这样可以直接得到因子向量,而不是返回一个新的数据框。
这个问题似乎与你去年7月30日的问题类似。我理解你的感受-对我来说,即使使用R两年后,其中一些东西也只是开始明白... 🙂
文章如下:
访问列名获取的是一个因子向量,可以转换为数值类型。然而,数据框是一个列的列表。当使用单个数字和单个括号操作符在列表上操作时,会得到一个长度为一的列表。对于数据框也是如此,因此df.test[1]
会将第一列作为新的数据框返回,而不能通过as.numeric()
进行强制转换。之前并不知道这一点!
解决方法是使用双括号操作符df.test[[1]]
来访问列,这样可以直接得到因子向量,而不是返回一个新的数据框。
这个问题似乎与去年7月30日的问题类似。我理解你的感受-对我来说,即使使用R两年后,其中一些东西也只是开始明白... 🙂
问题出现的原因是在使用as.numeric()函数时,没有正确地将因子变量转换为数值变量。在代码中,使用了df.test[,1]来表示第一列的因子变量,但是这会返回一个因子变量的向量,而不是数值向量。正确的方法是使用df.test[[1]]来表示第一列的因子变量,这样就可以正确地将因子变量转换为数值向量。解决方法之一是在as.numeric()函数中使用df.test[[1]]来转换因子变量。另一种方法是在创建数据框时,在设置列名之后,使用df.test$a <- factor(df.test$a, levels=c(1:26), labels=letters)来将列"a"转换为因子变量。接下来,可以使用as.numeric(df.test[[1]])函数来将因子变量转换为数值向量。这样就可以得到正确的结果。