为什么dplyr重新编码在重新编码到NA而不是NaN时会产生错误

为什么dplyr重新编码在重新编码到NA而不是NaN时会产生错误,r,dplyr,mutate,R,Dplyr,Mutate,我正在用dplyr重新编码。当我将一个值重新编码为NA,但不是NaN时,我得到了一个错误。下面是一个例子: df <- df %>% mutate(var=recode(var,`2`=0,`3`=NaN)) 如果 library(dplyr) df %>% mutate(var = na_if(var, 3)) 使用recode,@IceCreamToucan的答案很好,但是如果我们想在整数/数字之间自动更改它,我们仍然可以在乘法中基于NA的属性(返回NA,但它

我正在用dplyr重新编码。当我将一个值重新编码为NA,但不是NaN时,我得到了一个错误。下面是一个例子:

df <- df %>% mutate(var=recode(var,`2`=0,`3`=NaN))

如果

library(dplyr)
df %>% 
   mutate(var = na_if(var, 3))

使用
recode
,@IceCreamToucan的答案很好,但是如果我们想在
整数/数字之间自动更改它,我们仍然可以在乘法中基于
NA
的属性(返回NA,但它会自动更改类型)

它也可以是返回
NA

df %>%
      mutate(var = recode(var,`2`=0,`3`= max(var[1], NA)))
数据
df运行代码时会出现此错误

tibble(var = rep(2:3, 4)) %>% 
 mutate(var=recode(var,`2`=0,`3`=NA)) 
# Error: Vector 2 must be a double vector, not a logical vector
这是因为
NA
是合乎逻辑的,但
recode
需要双精度编码

class(NA)
# [1] "logical"
您可以使用
NA\u real\u
来代替,因为这是一个双精度

class(NA_real_)
# [1] "numeric"
is.double(NA_real_)
# [1] TRUE

tibble(var = rep(2:3, 4)) %>% 
 mutate(var=recode(var,`2`=0,`3`=NA_real_)) 
#     var
#   <dbl>
# 1     0
# 2    NA
# 3     0
# 4    NA
# 5     0
# 6    NA
# 7     0
# 8    NA
因为对于
c
功能:

输出类型由最高类型的组件确定 在层次结构中,NULL
谢谢我选择这个答案是因为我想一次性地重新编码我的变量。从未考虑过NA的类型,正是因为你确定的原因。。。
df <- data.frame(var = c(2, 3, 4, 5, 3))
tibble(var = rep(2:3, 4)) %>% 
 mutate(var=recode(var,`2`=0,`3`=NA)) 
# Error: Vector 2 must be a double vector, not a logical vector
class(NA)
# [1] "logical"
class(NA_real_)
# [1] "numeric"
is.double(NA_real_)
# [1] TRUE

tibble(var = rep(2:3, 4)) %>% 
 mutate(var=recode(var,`2`=0,`3`=NA_real_)) 
#     var
#   <dbl>
# 1     0
# 2    NA
# 3     0
# 4    NA
# 5     0
# 6    NA
# 7     0
# 8    NA
c(1, NA, 3)