R按状态保持日期计数

时间:2018-01-17 02:54:45

标签: r date if-statement dataframe apply

我是R的新手,我的数据框包含start_date,日差和状态,我想要做的是使用Sys.Date()减去start_date来检查状态失败时的天差,以及何时状态通过日期计数将停止并显示固定的日差。

data.frame:

Start_Date  Difference  Status
1/1/2018    16  Fail
1/1/2018    16  Fail
1/1/2018    16  Pass
1/1/2018    16  Pass
5/1/2018    12  Fail
5/1/2018    12  Fail
5/1/2018    12  Fail
5/1/2018    12  Pass
10/1/2018   7   Pass
10/1/2018   7   Pass
10/1/2018   7   Pass
10/1/2018   7   Fail

所以两天后,它将如下所示:

expected data.frame:

Start_Date  Difference  Status
1/1/2018    18  Fail
1/1/2018    18  Fail
1/1/2018    16  Pass
1/1/2018    16  Pass
5/1/2018    14  Fail
5/1/2018    14  Fail
5/1/2018    14  Fail
5/1/2018    12  Pass
10/1/2018   7   Pass
10/1/2018   7   Pass
10/1/2018   7   Pass
10/1/2018   9   Fail

我今天使用了Sys.Date(),因此传递状态行将保持日期差异,失败状态行将保持日期计数。 我累了:

If (df$Status == "Pass") { df$Difference <- "I have not idea" } else { df$Difference <- Sys.Date()-df$Start_Date }

类似的东西,任何建议?感谢。

1 个答案:

答案 0 :(得分:0)

如果给定一个向量(例如,尝试if(c(T,F)){print(1)}else{print(2)}if(c(F,T)){print(1)}else{print(2)}),语句仅评估第一个元素,因此您需要以元素方式查看它们。

我假设通过和失败是以另一种方式设置的,您只是想在状态更新后更新差异?如果是这样的话,我建议使用dplyr的mutate和base的ifelse。

如果Status ==&#34; Fail&#34;这会改变差异中的值。并以其他方式保留原样。如果需要整数,也可以使用difftime添加一个圆。

df <- df %>% 
mutate(Difference = ifelse(Status == "Fail", difftime(Sys.time(),Start_Date, unit = "days"), Difference))