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