将DF列转换为因子不是直截了当的

时间:2017-09-11 05:05:00

标签: r variables type-conversion

我正在学习R并欢迎一些解释/指针,指出错误的含义以及为什么我不能简单地将列分配为因素:

在R中,我read.csv()将一个文件放入变量DF中。 class(DF)告诉我这是“data.frame”,但第1,2和3列是非因素。当我尝试将列1,2,3分配为因子时,我收到错误:

asFactors <- c(1:3)
DF[asFactors] <- as.factors(DF[asFactors]) # same if I use DF[,asFactors] 
Error in sort.list(y) : 'x' must be atomic for 'sort.list'
Have you called 'sort' on a list?

排序与我尝试更改变量类型有什么关系?

相反,我似乎需要做的是使用apply()函数将列转换为因子(但这不是最直观的事情):

DF[,asFactors] <- lapply(DF[asFactors], factor)

此外,如果我尝试使用lapply将列转换为4,5,6到数字,我会收到一个新错误:

asNumeric <- c(4:6)
DF[,asNumeric] <- lapply(DF[asNumeric], numeric) 
Error in FUN(X[[i]], ...) : invalid 'length' argument

如果我回到原来的尝试,我得到:

DF[,asNumeric] <- as.numeric(DF[,asNumeric])
Error: (list) object cannot be coerced to type 'double'

因此,对于每个变量类型,我似乎=需要一种不同的转换列的方法,或者我没有找到适用于所有这些的一种方法。

1 个答案:

答案 0 :(得分:3)

要将多列更改为factor,请使用:

DF[,1:3] <- lapply(DF[,1:3], factor)

要从因子更改为数字,请记住使用as.numeric(as.character(x)),如下所示:

DF[,1:3] <- lapply(DF[,1:3], function(x) as.numeric(as.character(x)))