我正在尝试将具有空白的日期字段替换为另一个日期字段(其中也可能包含空白)。我正在尝试使用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
答案 0 :(得分:0)
对于以后的帖子,最好将示例数据包括在dput
的输出中。这样,我们不仅知道数据,而且知道数据类型。
Date.Closed
和Date.Hidden
是factor
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
Date.Closed
和Date.Hidden
是Date
个对象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)