用另一个日期替换日期中的NA [英] Replace NA´s in dates with another date

查看:89
本文介绍了用另一个日期替换日期中的NA的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

数据:

DB1 <- data.frame(orderItemID  = 1:10,     
orderDate = c("2013-01-21","2013-03-31","2013-04-12","2013-06-01","2014-01-01", "2014-02-19","2014-02-27","2014-10-02","2014-10-31","2014-11-21"),  
deliveryDate = c("2013-01-23", "2013-03-01", "NA", "2013-06-04", "2014-01-03", "NA", "2014-02-28", "2014-10-04", "2014-11-01", "2014-11-23"))

预期结果:

   DB1 <- data.frame(orderItemID  = 1:10,     
 orderDate= c("2013-01-21","2013-03-31","2013-04-12","2013-06-01","2014-01-01", "2014-02-19","2014-02-27","2014-10-02","2014-10-31","2014-11-21"),  
deliveryDate = c("2013-01-23", "2013-03-01", "2013-04-14", "2013-06-04", "2014-01-03", "2014-02-21", "2014-02-28", "2014-10-04", "2014-11-01", "2014-11-23"))

我的问题与我发布的另一个问题类似:请不要感到困惑. 如您在上面看到的,交货日期中有些值缺少,我想用另一个日期替换它们.该日期应为特定商品的订购日期+(完整)天(2天)的平均交货时间. 平均交货时间是根据所有不包含缺失值的样本的平均值计算得出的时间=(2days + 1day + 3days + 2days + 1day + 2days + 1day + 2days):8 = 1,75

My question is similar to another one I posted: so don´t be confused. As you can see above I have some missing values in the delivery dates and I want to replace them by another date. That date should be the order date of the specific item + the average delivery time in (full) days.(2days) The average delivery time is the time calculated from the average value of all samples that do not contain Missing values = (2days+1day+3days+2days+1day+2days+1day+2days):8=1,75

因此,我想用交货日期+2天替换交货时间中的NA.如果没有NA,则日期应保持不变.

So I want to replace the NA in delivery time with the order date +2days. When there´s no NA, the date should stay the same.

我已经尝试过(使用lubridate),但是它不起作用:(

I tried this already (with lubridate), but it´s not working :(

DB1$deliveryDate[is.na(DB1$deliveryDate) ] <- DB1$orderDate + days(2)

有人可以帮助我吗?

推荐答案

假定您已经像这样输入数据(请注意,NA不在引号中,因此它们被视为NA而不是"NA")...

Assuming that you have entered your data like this (note that NAs are not enclosed in quotes so they are read as NAs and not "NA")...

DB1 <- data.frame(orderItemID  = 1:10,     
  orderDate = c("2013-01-21","2013-03-31","2013-04-12","2013-06-01","2014-01-01", "2014-02-19","2014-02-27","2014-10-02","2014-10-31","2014-11-21"),  
  deliveryDate = c("2013-01-23", "2013-03-01", NA, "2013-06-04", "2014-01-03", NA, "2014-02-28", "2014-10-04", "2014-11-01", "2014-11-23"),
  stringsAsFactors = FALSE)

...并且按照Nicola的回答,这样做是为了正确设置格式...

...and, per Nicola's answer, done this to get the formatting right...

DB1[,2:3]<-lapply(DB1[,2:3],as.Date)

...这也有效:

library(lubridate)
DB1$deliveryDate <- with(DB1, as.Date(ifelse(is.na(deliveryDate), orderDate + days(2), deliveryDate), origin = "1970-01-01"))

或者您可以使用dplyr对其进行管道传输:

Or you could use dplyr and pipe it:

library(lubridate)
library(dplyr)
DB2 <- DB1 %>%
  mutate(deliveryDate = ifelse(is.na(deliveryDate), orderDate + days(2), deliveryDate)) %>%
  mutate(deliveryDate = as.Date(.[,"deliveryDate"], origin = "1970-01-01"))

这篇关于用另一个日期替换日期中的NA的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆