替换数据集中错误的交付日期

时间:2015-07-18 09:28:14

标签: r

数据:

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-08", "2013-06-04", "2014-01-03", "2014-02-17", "2014-02-28", "2014-10-04", "2014-11-01", "2014-11-23"))
daysTillDelivery = c("2", "1", "-4", "3", "2", "-2", "1", "2", "1", "2")

预期结果:

   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"))
daysTillDelivery = c("2", "1", "NA", "3", "2", "NA", "1", "2", "1", "2")
嘿伙计们, 不幸的是我有另一个问题我不能单独解决...正如你在上面看到的我有一些订单日期,交货日期和一个计算订单和交货日期(数字)之间的天数的功能。到目前为止,此工作正常,但正如您所看到的,有一些不正确的交货日期(交货日期早于订单日期)所以在某些情况下天数是否定的。因为天数不可能是负数,所以如果值为负,我想用“NA”替换交货日期。当值为正时,该值应保持为原始日期。

我已经尝试过这样了:

DB1$deliveryDate <- ifelse(DB1$daysTillDelivery < 0 , DB1[c("deliveryDate")] <- "NA",  DB1$deliveryDate)

但这不能正常工作......

希望有人可以帮助我:)

新的预期结果:

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"))
daysTillDelivery = c("2", "1", "2", "3", "2", "2", "1", "2", "1", "2")

1 个答案:

答案 0 :(得分:0)

我们可以使用&lt; daysTillDelivery&#39;中的负值创建逻辑索引。出于某种原因,它是一个字符向量,我们可以将其转换为&#39; numeric&#39;

  indx <- as.numeric(daysTillDelivery)<0
  is.na(DB1$deliveryDate) <- indx

或者

  DB1$deliveryDate[indx] <- NA

和&#39; daysTillDelivery

相同
  daysTillDelivery[indx] <- NA 

更新

如果我们需要更换&#39; deliveryDate&#39;基于&lt; daysTillDelivery&#39;中的负值,

  #convert the Date columns from 'factor' class to 'Date'
  DB1[-1] <- lapply(DB1[-1], as.Date)
  #add 2 to the subset of "orderDate" based on 'indx' and replace 
  #the corresponding values in 'deliveryDate' with that 
  DB1$deliveryDate[indx] <- as.Date(DB1$orderDate[indx])+2