r - r dplyr::case_when 错误:必须是字符向量,而不是双精度向量
问题描述
我试图在 dplyr::mutate 中使用 dplyr::case_when 来替换一些值:
data<-data%>%
mutate(floor = case_when(
floor_id == 2 ~ "ground_floor",
floor_id == 3 ~ "mezzanine",
floor_id == 1 ~ "basement",
floor_id == 30 ~ "over_10",
floor==1 ~ 1,
floor==2 ~ 2,
floor==3 ~ 3,
floor==4 ~ 4,
floor==5 ~ 5,
floor==6 ~ 6,
floor==7 ~ 7,
floor==8 ~ 8,
floor==9 ~ 9,
floor==10 ~ 10,
TRUE ~ as.character(floor)))
我有一个错误
Error: must be a character vector, not a double vector
我有 2 个问题:1)有谁知道如何更改代码来修复此错误?2) 如果没有匹配的情况,则返回 NA 这就是为什么我添加所有这些行,如 floor==10 ~ 10。有什么方法可以减少代码冗余?
解决方案
case_when
是类型严格的,这意味着您需要返回相同类型的值。对于前几种情况,您返回的值是“底层”、“夹层”等,而后来您返回的是数字 1、2,因此您会收到该错误。如果您将所有返回值更改为“1”、“2”等字符值,那么它将起作用。因为,您只是返回
floor
值,您可以通过以下方式减少代码:library(dplyr) data<- data%>% mutate(floor = case_when( floor_id == 2 ~ "ground_floor", floor_id == 3 ~ "mezzanine", floor_id == 1 ~ "basement", floor_id == 30 ~ "over_10", TRUE ~ as.character(floor)))
推荐阅读
- c# - 似乎无法访问我的 cshtml 文件上的模型属性
- uwsgi - 如何在不同的路线上定义不同的 harakiri 超时?
- google-sheets - 我想导入一个低于特定值的范围
- python - 带有 f 字符串的花括号 - ValueError:字符串格式说明符中不允许符号
- material-ui - 在工具栏组件上隔开 Material UI 排版组件
- javascript - 创建模式时“新模式”的目的是什么?
- python-3.x - Python3:将字典值打印到 'a': [1, 2, 3, 5, 6, 9] 到 'a': 1-3, 5-6, 9?
- c++ - 基于 C++17 中的范围,用于自定义容器或具有不同开始/结束类型的通用类
- docker - 使用 Docker Toolbox for Windows 在 uses 文件夹外挂载驱动器
- oop - 在 Lua 中摆脱一个类的实例