如何在R中将数值列转换为因子列

4
我正在尝试使用softImpute命令(来自softImpute软件包)填充缺失值,并且在使用softImpute之前,我正在尝试将大型数据框中的分类变量转换为因子类型。
我已经使用了as.factor命令和factor命令,但它们都产生了以下结果。
train[a]=factor(train[a])

Error in sort.list(y) : 'x' must be atomic for 'sort.list'
Have you called 'sort' on a list?

a在这里是一个向量,例如:c(1:92)

我也试过使用as.character,但是softImpute命令不会将变量识别为字符型,而是会将它们视为数值型,导致分类/指示变量出现小数值。


你是否在寻找类似这样的代码:x <- factor(x),其中 x <- c(1:92)。输出格式将更有帮助。 - vamosrafa
不,我正在尝试将数据框“train”中的第1到92列转换为因子,因为它们是分类变量。 - halo09876
你写的完整代码是什么? - vamosrafa
1个回答

3
尝试一下:
train[[a]]=factor(train[[a]])

当然,这假定a是一个对象,在范围1:length(train)内有一个数值或是names(train)向量中的值之一。如果您使用"["引用数据框,则会得到一个列表,其中只有一个元素,该元素恰好是您希望进行"因子化"的向量,但它实际上并不是一个向量,而是一个仅包含一个元素的列表。而"[["函数则会直接给出向量。


我收到以下错误:.subset2(x, i, exact = exact) 中的错误: 第2级递归索引失败。 - halo09876
a是一个数值范围内的数字。a的结构是整数,a是某些数字的向量。我正在尝试选择训练数据框中的第i、j等列,并将它们转换为因子。 - halo09876
所以您希望将单独的元素列为因子?我的理解正确吗? - vamosrafa
1
是的。我搜索了网站并使用了train[,a] <- lapply(train[,a] , factor) ,这个方法有效!感谢您提供的参考资料。 - halo09876

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接