我正在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
是类型严格的,这意味着您需要返回相同类型的值。对于前几种情况,您将返回“ ground-floor”,“ mezzanine”等值,而稍后将返回数字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)))