r - 如何将所有因子变量转换为数值变量(一次在多个数据框中)?
问题描述
我有 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]))
解决方案
您实际上要做的是修改字段的类型,如果它是一个因素(数字类型)。一种使用方法purrr
是:
library(purrr)
map(cities, ~ modify_if(., is.factor, as.numeric))
请注意,modify()
它本身就像lapply()
,但它不会更改您正在修改的对象(在本例中为数据框)的底层数据结构。modify_if()
只需将谓词作为附加参数。
推荐阅读
- .net - 我自己的核心 CLR 分析器未附加到工作进程
- apache - 重新安装 Mariadb 和 Apache 设置后,永久链接/可读链接不再起作用
- java - HAPI FHIR 读取 API _summary=text 抛出错误 - “无法调用”java.lang.CharSequence.length()”,因为“csq”为空”
- mongodb - MongoDb 聚合非常慢,对 +1M 记录进行匹配和排序
- python - python脚本中的错误:进程以退出代码-1073740940(0xC0000374)完成
- magento - Magento 2 静态不会生成
- pyspark - 将一列中的分钟添加到另一列 pyspark 中的时间戳
- javascript - 与不同的父母一起抓取图像和文本
- python - Pandas中时间戳行的差异,每次都会更新差异条件
- r - 我可以用 R 中空间聚集的组创建一个共现网络吗?