如何将所有因子变量转换为数值变量(一次在多个数据框中)?

时间:2019-05-07 14:28:41

标签: r loops for-loop

我有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]))

2 个答案:

答案 0 :(得分:1)

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

library(purrr)

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

请注意,modify()本身与lapply()类似,但它不会更改您要修改的对象(在本例中为数据框)的基础数据结构。 modify_if()只是将谓词作为附加参数。

答案 1 :(得分:0)

对于任何对我的问题感兴趣的人,我都会给出答案:


for ( i in cities){ 

  assign(i, as.data.frame(lapply(get(i), function(x) as.numeric(levels(x))[x]))) 

  }