r - 带有因子变量的 as.numeric() 的奇怪行为 - 提供的数字与提供的数字完全不同
问题描述
我有一个数据集,我试图将一个因子转换为一个数字变量,它在我第一次运行时似乎工作正常,但现在我已经更改了矢量内容 as.numeric() 函数返回不同(可能是以前的)值而不是现在向量中的值,尽管这些值似乎没有存储在任何地方。但是,如果我先转换为字符,它就可以正常工作。我正在使用的代码是:
rm(reprex) # ensure does not exist from previously
reprex <- data.frame(rbind(c("BT",8),c("BL", 1), c("TS",1), c("SA", 7), c("S", 5), c("LS",5), c("M",3), c("CV",3), c("CF",3), c("PE",3)))
names(reprex) <-c("Post Area", "Count")
reprex$Countnum <- as.numeric(reprex$Count) # should be same as Count
reprex$Countnum_char <- as.numeric(as.character(reprex$Count)) # is same as Count
head(reprex)
给出:
Post Area Count Countnum Countnum_char
1 BT 8 5 8
2 BL 1 1 1
3 TS 1 1 1
4 SA 7 4 7
5 S 5 3 5
6 LS 5 3 5
为什么是这样?如果我在转换为数字之前将其转换为字符似乎可以避免它,但我很困惑为什么会发生这种情况以及奇怪映射的(我怀疑来自数据框的先前版本)因子级别正在存储,以便在我移除对象后它们仍然存在。
解决方案
这个问题涉及如何R
理解您的流程。Count = 1
是最小的数,所以变成Countnum = 1
。Count = 3
是第二大数字,因此因子水平为 2,这也意味着 ,Countnum = 2
等等。实际上,您首先要做的as.numeric
是获取因子水平并将因子水平转换为数字。将Countnum_char
字符值(例如Count = 8
isfactor level = 5
或Count = 5
is factor level = 3
)作为其值并将该值转换为数字,而不是因子级别。
推荐阅读
- angular - 我在一个具有不同位置的组件(一页)中有两个带有 Angular Material 的下拉菜单,我想为每个提供唯一的类
- c - 为什么 curl 无法使用受密码保护的密钥?
- java - 变量仅在 while 循环内失去价值
- .net-core - 更新、创建或删除 EF Core
- javascript - 如何在 Nuxt 中使路由区分大小写
- python - 如何使用元类和命令行调用 python 类
- java - Spring boot2 抱怨 CircuitBreakerConfigurationOnMissingBean
- ios - UIImagePickerController 编辑图像 - 在顶部裁剪一些额外的图像
- node.js - 货币和间隔字段必须在此订阅的所有计划中匹配。发现区间字段不匹配
- javascript - 如何使用 MongoDB 使单选按钮自动签入编辑页面?