我正在学习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'
因此,对于每个变量类型,我似乎=需要一种不同的转换列的方法,或者我没有找到适用于所有这些的一种方法。
答案 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)))