Reverting to Factor Codes R

27 浏览
0 Comments

Reverting to Factor Codes R

假设我有一个看起来像这样的数据框:

df.test <- data.frame(1:26, 1:26)
colnames(df.test) <- c("a","b")

然后我应用一个因子:

df.test$a <- factor(df.test$a, levels=c(1:26), labels=letters)

现在,我想把它转换回整数代码:

as.numeric(df.test[1])## 回复一个错误代码。

但是这样可以工作:

as.numeric(df.test$a)

为什么会这样呢?

0
0 Comments

问题的原因是当使用列名访问数据框中的列时,会得到一个因子向量,可以将其转换为数值。然而,数据框是一个列的列表,当在列表上使用单个数字和单个括号操作符时,会得到一个长度为一的列表。对于数据框也是如此,因此df.test[1]会将第一列作为新的数据框返回,而不能通过as.numeric()进行强制转换。我之前不知道这一点!

解决方法是使用双括号操作符df.test[[1]]来访问列,这样可以直接得到因子向量,而不是返回一个新的数据框。

这个问题似乎与你去年7月30日的问题类似。我理解你的感受-对我来说,即使使用R两年后,其中一些东西也只是开始明白... 🙂

文章如下:

访问列名获取的是一个因子向量,可以转换为数值类型。然而,数据框是一个列的列表。当使用单个数字和单个括号操作符在列表上操作时,会得到一个长度为一的列表。对于数据框也是如此,因此df.test[1]会将第一列作为新的数据框返回,而不能通过as.numeric()进行强制转换。之前并不知道这一点!

解决方法是使用双括号操作符df.test[[1]]来访问列,这样可以直接得到因子向量,而不是返回一个新的数据框。

这个问题似乎与去年7月30日的问题类似。我理解你的感受-对我来说,即使使用R两年后,其中一些东西也只是开始明白... 🙂

0
0 Comments

在这个例子中,使用as.numeric函数将因子转换为数值是可以正常工作的。但这并不是一个通用的解决方法,需要注意。请参考Joshua Ulrich的评论。

原因:将因子转换为数值时,使用as.numeric函数只能在特定情况下正常工作,但不能保证在所有情况下都有效。

解决方法:根据Joshua Ulrich的评论,可以使用以下方法将因子转换为数值,以确保结果正确。

as.numeric(as.character(df.test$a))

0
0 Comments

问题出现的原因是在使用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]])函数来将因子变量转换为数值向量。这样就可以得到正确的结果。

0