"ifelse" 函数 returns 数字而不是日期

"ifelse" function returns numbers instead of dates

目前我正在参与数据操作任务,以便创建数据table以供进一步分析。

假设在一个小数据框中有两个日期列:

  Treaty_Date.x Treaty_Date.y
1    2020-12-31          <NA>
2          <NA>    2019-05-22
3    2020-10-13    2019-09-01

第一个是“Treaty_Date.x”,第二个是“Treaty_Date.y”。 NA 也可用。

实现下面给出的代码(使用基本的“ifelse”函数编写),

ResSet2$Treaty_Date <- ifelse(
    (is.na(ResSet2$Treaty_Date.x) & is.na(ResSet2$Treaty_Date.y)),
    "No data",
    ifelse(
        (is.na(ResSet2$Treaty_Date.x) & !is.na(ResSet2$Treaty_Date.y)),
        ResSet2$Treaty_Date.y,
        ifelse(
            (!is.na(ResSet2$Treaty_Date.x) &  is.na(ResSet2$Treaty_Date.y)),
            ResSet2$Treaty_Date.x,
            ifelse(
                (!is.na(ResSet2$Treaty_Date.x) & !is.na(ResSet2$Treaty_Date.y)),
                ResSet2$Treaty_Date.y,
                "No data"
            )
        )
    )
)

新创建的列“Treaty_Date”中的日期变为数字(请参见下面的屏幕截图)。鉴于为该功能提供的说明,我确实理解它是一个功能的功能,使我无法获得正确的格式。

  Treaty_Date.x Treaty_Date.y Treaty_Date
1    2020-12-31          <NA>       18627
2          <NA>    2019-05-22       18038
3    2020-10-13    2019-09-01       18140

但是在我必须使用嵌套 ifelse 语句的情况下如何克服这个“缺点”?

数据

ResSet2 <- structure(list(Treaty_Date.x = structure(c(18627, NA, 18548), class = "Date"), 
    Treaty_Date.y = structure(c(NA, 18038, 18140), class = "Date")), row.names = c(NA, 
-3L), class = "data.frame")

基本上,新列应为条约日期 y(如果有),否则为条约日期 x,否则为空。另一种选择

ResSet2$Treaty_Date=ResSet2$Treaty_Date.y
ResSet2$Treaty_Date[is.na(ResSet2$Treaty_Date)]=
  ResSet2$Treaty_Date.x[is.na(ResSet2$Treaty_Date)]

  Treaty_Date.x Treaty_Date.y Treaty_Date
1    2020-12-31          <NA>  2020-12-31
2          <NA>    2019-05-22  2019-05-22
3    2020-10-13    2019-09-01  2019-09-01