dplyr - ifelse 返回意外的值
问题描述
基本上,我想基于现有列创建一个新列。我希望仅在满足某些条件时才更改新列。
我在下面尝试了两种方法,但任何一种都有效 - 它返回一个数值而不是 FALSE 条件的现有列的值。我读了一些帖子,表明 ifelse 删除了列的属性,这可能会导致问题。
有人能帮我吗?谢谢!
顺便说一句,如果现有列是数字,它工作正常。
attach(iris)
library(dplyr)
# Approach 1
d1 = iris %>%
mutate(s = ifelse(Species == "versicolor", "ver", Species))
View(d1)
# Approach 2
d2=iris
d2$s = ifelse(d2$Species == "versicolor", "ver", d2$Species)
View(d2)
解决方案
包含字符的列作为因子加载到 R 中,因此,如果您希望将它们作为对字符进行操作,则应将它们转换为字符:
attach(iris)
library(dplyr)
iris$Species <- as.character(iris$Species)
# Approach 1
d1 = iris %>%
mutate(s = ifelse(Species == "versicolor", "ver", Species))
View(d1)
# Approach 2
d2=iris
d2$s = ifelse(d2$Species == "versicolor", "ver", d2$Species)
View(d2)
聚类和其他一些 ML 方法将需要相反的转换 - as.factor
.
推荐阅读
- c# - Bot Framework:提示和重试提示信息同时出现
- c++ - 未找到:操作类型未注册“重采样器”已注册在此进程中运行的二进制文件中
- r - R不会将日期格式更改为指定类型
- delphi - Delphi:计算自动换行文本所需的矩形高度
- r - 删除列中字符串的特定部分
- jenkins - Jenkins:将工件(jar 文件)复制到远程 linux 服务器,通过 SSH 插件发布
- image - 如何将“opencv::Mat”转换为“podofo::PdfImage”?
- c# - 对多个 DataGridView 列进行排序并导出为 CSV
- python - 气流:将参数从 python 函数传递给 MySQL Operator
- r - 使用 data.table 从大型混合数据集中获取相关性