我正在尝试编写R代码来创建一个新变量,该变量从POSIXct / POSIXt类的两个变量中排除缺少的日期值。因此,例如,如果“ date1”和“ date2”是我的两个变量,主要包括日期和一些缺失值。我想将所有不遗漏的日期值存储在新变量“ var”中。我相信我的代码将如下所示:
if date1 = 'NA' then
var = date2
else var = date1
end
我很清楚在这种情况下不能使用if-else语句。但是,我不确定如何编写此代码。任何帮助表示赞赏! :)
答案 0 :(得分:0)
假设您有此数据(选择包含一些潜在的边缘情况)。顺便说一句,以可复制的形式包含数据或类似数据的样本是一种很好的形式。看到这里:How to make a great R reproducible example
my_data <- data.frame(
date1 = as.Date(c("2020-01-01", "2020-01-01", "2020-01-01", NA, NA), "%Y-%m-%d"),
date2 = as.Date(c("2020-01-02", "2020-01-02", NA, "2020-01-02", NA), "%Y-%m-%d")
)
> my_data
date1 date2
1 2020-01-01 2020-01-02
2 2020-01-01 2020-01-02
3 2020-01-01 <NA>
4 <NA> 2020-01-02
5 <NA> <NA>
以下是您所要完成的几种方法。
1)在Base R中,您可以使用ifelse
,但是它具有将日期转换为数字的麻烦方法,并且需要花费一些时间才能将它们恢复。参见How to prevent ifelse() from turning Date objects into numeric objects
my_data$base = as.Date(ifelse(is.na(my_data$date1),
as.character(my_data$date2),
as.character(my_data$date1)), "%Y-%m-%d")
2)dplyr
的{{1}}不这样做,因此您可以使用:
if_else
3)my_data$if_else = dplyr::if_else(is.na(my_data$date1),
my_data$date2,
my_data$date1)
是一种更简洁的方法:
dplyr::coalesce
输出
my_data$coalesce = dplyr::coalesce(my_data$date1, my_data$date2)