R-if_else分配na值

时间:2018-12-05 16:27:17

标签: r if-statement

我在R中有一个数据框。我的目标是使用if_else语句创建一个新列。如果一行中的值等于字符串"company",则此新列的值将是data列中的值。否则,我要分配给NA值。

我不知道该怎么实现,下面的代码不起作用。由于数据类型不同。

library(dplyr)
  active_labels <- data %>%
      mutate(start_date = if_else(type == "company", date, NA) 


Error in mutate_impl(.data, dots) : 
  Evaluation error: `false` must be type double, not logica

3 个答案:

答案 0 :(得分:5)

if_else的帮助页面开始:

  

与基本的“ ifelse()”相比,此功能更加严格。它        检查“ true”和“ false”是同一类型。

这意味着dateNA必须是同一类型。碰巧,NA也有一个类型,它是logical

typeof(NA)
# [1] "logical"

因此,您需要输入NA的类型化版本。根据{{​​1}}的类型,您应该使用以下一种:

  • date
  • NA_real_ : typeof(NA_real_) # [1] "double"
  • NA_integer_ : typeof(NA_integer_) # [1] "integer"
  • NA_character_: typeof(NA_character_) # [1] "character"

如果NA_complex_ : typeof(NA_complex_) # [1] "complex"不满足上述条件,则应退回到date


编辑:从收到的错误消息中,您很可能应该使用ifelse

答案 1 :(得分:0)

尝试一下:

active_labels <- data
active_labels$start_date <- ifelse (active_labels$type == "company", active_labels$date, NA)

希望有帮助。

答案 2 :(得分:0)

这里也可以使用dplyr::case_when

library(dplyr)
  active_labels <- data %>%
      mutate(start_date = case_when(type == "company" ~ date, 
                                    TRUE ~ NA)