根据第一次遇到最大值限制行
restricting rows based on first encounter of maximum value
我有一个数据集,如果一列中的列值超过 120 天,我想限制它。例如,
ticket date timelag
1 2009-01-01
1 2010-01-01 360
1 2010-02-02 30
2 2010-02-02
2 2010-02-03 1
2 2010-02-04 1
3 2009-01-01
3 2009-01-02 1
3 2009-01-03 1
3 2009-08-06 130
3 2009-08-07 1
3 2010-02-01 140
所以在这种情况下,工单 1 在第二个事件中超过了 120 天的时滞,所以我想在此之后丢弃工单 1 的后续行。在情况 2 中,没有工单事件持续时间超过 120 天,因此该工单的所有行都需要保持完整。因此,在情况 3 中,票证有两个连续的时间段,超过 120 天,但我想在遇到第一个 120 天的时间段时立即限制行,即 120 天之前的活动日。因此,对于工单 3,仅应报告前三个事件的日期,其余的将被丢弃。
关于如何限制这些行有什么建议吗?谢谢
您可以使用-
library(dplyr)
df %>%
mutate(date = as.Date(date)) %>%
group_by(ticket) %>%
slice({
tmp <- diff(date) > 30
if(any(tmp)) 1:which.max(tmp) else row_number()
}) %>% ungroup
# ticket date
# <int> <date>
#1 1 2009-01-01
#2 2 2010-02-02
#3 2 2010-02-03
#4 2 2010-02-04
#5 3 2009-01-01
#6 3 2009-01-02
#7 3 2009-01-03
我有一个数据集,如果一列中的列值超过 120 天,我想限制它。例如,
ticket date timelag
1 2009-01-01
1 2010-01-01 360
1 2010-02-02 30
2 2010-02-02
2 2010-02-03 1
2 2010-02-04 1
3 2009-01-01
3 2009-01-02 1
3 2009-01-03 1
3 2009-08-06 130
3 2009-08-07 1
3 2010-02-01 140
所以在这种情况下,工单 1 在第二个事件中超过了 120 天的时滞,所以我想在此之后丢弃工单 1 的后续行。在情况 2 中,没有工单事件持续时间超过 120 天,因此该工单的所有行都需要保持完整。因此,在情况 3 中,票证有两个连续的时间段,超过 120 天,但我想在遇到第一个 120 天的时间段时立即限制行,即 120 天之前的活动日。因此,对于工单 3,仅应报告前三个事件的日期,其余的将被丢弃。
关于如何限制这些行有什么建议吗?谢谢
您可以使用-
library(dplyr)
df %>%
mutate(date = as.Date(date)) %>%
group_by(ticket) %>%
slice({
tmp <- diff(date) > 30
if(any(tmp)) 1:which.max(tmp) else row_number()
}) %>% ungroup
# ticket date
# <int> <date>
#1 1 2009-01-01
#2 2 2010-02-02
#3 2 2010-02-03
#4 2 2010-02-04
#5 3 2009-01-01
#6 3 2009-01-02
#7 3 2009-01-03