"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
目前我正在参与数据操作任务,以便创建数据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