首页 > 解决方案 > 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。有什么方法可以减少代码冗余?

标签: rcase-when

解决方案


  1. case_when是类型严格的,这意味着您需要返回相同类型的值。对于前几种情况,您返回的值是“底层”、“夹层”等,而后来您返回的是数字 1、2,因此您会收到该错误。如果您将所有返回值更改为“1”、“2”等字符值,那么它将起作用。

  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)))
    

推荐阅读