用另一个日期字段替换空白日期字段

时间:2018-09-26 00:10:28

标签: r

我正在尝试将具有空白的日期字段替换为另一个日期字段(其中也可能包含空白)。我正在尝试使用ifelse函数,该函数是:

companies$Date.Closed <- ifelse(companies$Date.Closed== "", companies$Date.Hidden,companies$Date.Closed)

这不起作用。供我的数据参考

Company    Date.Closed    Date.Hidden
CompanyA   2018-01-01     2018-01-01
CompanyB                  2018-02-01
CompanyC
CompanyD   2018-02-01     

注意:空白在r中显示为灰色“ NA” 基本上,如果Date.Closed为空,则用Date.Hidden填充它。当我在上面尝试我的代码时,我得到了

Error in charToDate(x):character string is not in a standard unambiguous format

但是我知道我的两个日期都是正确的格式,因为我可以在其他代码行中使用它们,例如基于日期的子集。

谢谢

dput(companies $ Date.Closed)返回一堆NA和一个可能存在日期的数字,例如:NA,NA,17371

1 个答案:

答案 0 :(得分:0)

对于以后的帖子,最好将示例数据包括在dput的输出中。这样,我们不仅知道数据,而且知道数据类型。


解决方案1:假设Date.ClosedDate.Hiddenfactor s

您可以在R基中执行

df$Date.Closed = ifelse(
    df$Date.Closed == "", 
    as.character(df$Date.Hidden), 
    as.character(df$Date.Closed))
df
#   Company Date.Closed Date.Hidden
#1 CompanyA  2018-01-01  2018-01-01
#2 CompanyB  2018-02-01  2018-02-01
#3 CompanyC
#4 CompanyD  2018-02-01

或者

df <- transform(df, Date.Closed = ifelse(
    Date.Closed == "", 
    as.character(Date.Hidden), 
    as.character(Date.Closed)))

tidyverse方式

library(tidyverse)
df %>%
    mutate(Date.Closed = if_else(Date.Closed == "", Date.Hidden, Date.Closed))
#   Company Date.Closed Date.Hidden
#1 CompanyA  2018-01-01  2018-01-01
#2 CompanyB  2018-02-01  2018-02-01
#3 CompanyC
#4 CompanyD  2018-02-01

解决方案2:假设Date.ClosedDate.HiddenDate个对象

df %>%
    mutate(Date.Closed = if_else(is.na(Date.Closed), Date.Hidden, Date.Closed))
#   Company Date.Closed Date.Hidden
#1 CompanyA  2018-01-01  2018-01-01
#2 CompanyB  2018-02-01  2018-02-01
#3 CompanyC        <NA>        <NA>
#4 CompanyD  2018-02-01        <NA>

样本数据

df <- read.table(text =
    "Company    Date.Closed    Date.Hidden
CompanyA   2018-01-01     2018-01-01
CompanyB   ''               2018-02-01
CompanyC   ''   ''
CompanyD   2018-02-01   ''", header = T)