我正在尝试过滤组中的数据,直到满足条件(在这种情况下直到状态为"已完成")并删除组中的其余行。我设法提出了这个排名解决方案,但在将代码应用到我的真实数据时,我遇到了一些问题。#34;。该函数有时不会保留最后一行(具有最大排名)。对此有更优雅的解决方案吗?
我使用的代码:
require(dplyr)
time <- seq(as.Date('2017/01/01'), as.Date('2017/01/15'), by="day")
set.seed(42); status <- sample(c("Completed", "On hold", "Active"), 15, replace = T)
ID <- c(rep(1, 5),rep(2, 5),rep(3, 5))
DF <- data.frame(Time = time,
Status = status,
ID = ID)
DF <- DF %>% group_by(ID) %>% mutate(ID_Rank = row_number())
DF$ID_Rank[DF$Status == "Completed"] <- max(DF$ID_Rank)+1
DF2 <- DF %>% group_by(ID) %>% filter(row_number() <= which.max(ID_Rank))