首页 > 解决方案 > 将两列中的数据合并为一列更改日期格式

问题描述

在数据框中,两列(fech_A 和 fech_B)包含不同原因的死亡日期。

   fech_A  fech_B  
1 8-02-06    <NA>  
2    <NA> 8-11-18  
3 9-03-14    <NA>  
4 9-03-05    <NA>  
5    <NA> 9-08-11  

我想将非 NA 日期合并到一个新列 fech_C 中。有了以前发表的评论中的答案,我的代码是

fech_A <- as.Date(c("8-02-06",NA,"9-03-14","9-03-05",NA),format="%d/%m/%Y")
fech_B <- as.Date(c(NA,"8-11-18",NA,NA,"9-08-11"),format="%d/%m/%Y")
calend1 <- data_frame(fech_A,fech_B)
fech_C <- with(calend1,ifelse(is.na(fech_A),fech_A,fech_B)

但新列以数字格式显示:

[1] -716570 -716284 -716168 -716177 -716018

如何格式化新列中的数据以显示为日期?

标签: rdatetime

解决方案


您可以通过逐行应用来执行此操作。我已经重写了您的示例以修复错误:

fech_A <- as.Date(c("8-02-06",NA,"9-03-14","9-03-05",NA),format="%d-%m-%y")
fech_B <- as.Date(c(NA,"8-11-18",NA,NA,"9-08-11"),format="%d-%m-%y")
calend1 <- data_frame(fech_A,fech_B)

apply(calend1, 1, function(x) if (is.na(x['fech_A'])) {
    x['fech_B']
} else {
    x['fech_A']
})

[1] "2006-02-08" "2018-11-08" "2014-03-09" "2005-03-09" "2011-08-09"

我确信有一种更好的方法可以将列合并在一起,但这在基础 R 中工作得很好,并且apply尊重日期的数据类型。


推荐阅读