数据:
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")
答案 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