我在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
答案 0 :(得分:5)
从if_else
的帮助页面开始:
与基本的“ ifelse()”相比,此功能更加严格。它 检查“ true”和“ false”是同一类型。
这意味着date
和NA
必须是同一类型。碰巧,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)