首页 > 解决方案 > 如何将所有因子变量转换为数值变量(一次在多个数据框中)?

问题描述

我有 n 个数据框,每个数据框对应一个城市的数据。

每个数据框有 3 个变量,目前它们都是因子变量。

我想将它们全部转换为数字变量。

我首先创建了一个包含所有数据帧名称的向量,以便在 for 循环中使用。


cities <- as.vector(objects())


for ( i in cities){

i <-  as.data.frame(lapply(i, function(x) as.numeric(levels(x))[x]))

}


尽管代码运行并且我没有收到错误代码,但我没有看到我的数据框有任何变化,因为所有三个变量仍然是因子变量。

最奇怪的是,当一个一个地做它们时(如下所示)它可以工作:


df <- as.data.frame(lapply(df, function(x) as.numeric(levels(x))[x]))

标签: rloopsfor-loop

解决方案


您实际上要做的是修改字段的类型,如果它是一个因素(数字类型)。一种使用方法purrr是:

library(purrr)

map(cities, ~ modify_if(., is.factor, as.numeric))

请注意,modify()它本身就像lapply(),但它不会更改您正在修改的对象(在本例中为数据框)的底层数据结构。modify_if()只需将谓词作为附加参数。


推荐阅读