为什么dplyr重新编码在重新编码到NA而不是NaN时会产生错误
我正在用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,但它
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)