过滤数据框以保留行,直到列值更改为 0
Filter data frame to keep rows until column values changes to 0
我有这个数据框,
`df <- tibble(
key = rep(1:3, c(8,4,5)),
Date = c(seq(as.Date('2016-12-17'), as.Date('2016-12-19'), '1 day'),
seq(as.Date('2016-12-21'), as.Date('2016-12-23'), '1 day'),
seq(as.Date('2016-12-29'), as.Date('2016-12-30'), '1 day'),
seq(as.Date('2017-05-18'), as.Date('2017-05-21'), '1 day'),
seq(as.Date('2017-05-18'), as.Date('2017-05-20'), '1 day'),
seq(as.Date('2017-05-23'), as.Date('2017-05-24'), '1 day')),
flag= c(1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,1)
)`
对于每个 'Key',我需要 'Date' 在 'Flag' 第一次变为 0 之前的最大值,或者如果 'Key' 没有 0 标志, 然后 return 'Date'.
的最大值
我需要以下输出。
key Date flag
1 2016-12-19 1
2 2017-05-21 1
3 2017-05-20 1
有人可以帮我解决这个问题吗?
谢谢。
在下面的代码中,我使用了匹配 returns 第一个匹配项的位置这一事实。然后我创建一个带有行索引的额外列,以便我可以在 flag = 1
第一次出现后过滤所有行
df %>%
group_by(key) %>%
arrange(Date) %>%
mutate(idx = 1:n()) %>%
filter(idx < match(0,flag) | is.na(match(0,flag))) %>%
summarise(Date = max(Date))
希望对您有所帮助!!
我有这个数据框,
`df <- tibble(
key = rep(1:3, c(8,4,5)),
Date = c(seq(as.Date('2016-12-17'), as.Date('2016-12-19'), '1 day'),
seq(as.Date('2016-12-21'), as.Date('2016-12-23'), '1 day'),
seq(as.Date('2016-12-29'), as.Date('2016-12-30'), '1 day'),
seq(as.Date('2017-05-18'), as.Date('2017-05-21'), '1 day'),
seq(as.Date('2017-05-18'), as.Date('2017-05-20'), '1 day'),
seq(as.Date('2017-05-23'), as.Date('2017-05-24'), '1 day')),
flag= c(1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,1)
)`
对于每个 'Key',我需要 'Date' 在 'Flag' 第一次变为 0 之前的最大值,或者如果 'Key' 没有 0 标志, 然后 return 'Date'.
的最大值我需要以下输出。
key Date flag
1 2016-12-19 1
2 2017-05-21 1
3 2017-05-20 1
有人可以帮我解决这个问题吗?
谢谢。
在下面的代码中,我使用了匹配 returns 第一个匹配项的位置这一事实。然后我创建一个带有行索引的额外列,以便我可以在 flag = 1
df %>%
group_by(key) %>%
arrange(Date) %>%
mutate(idx = 1:n()) %>%
filter(idx < match(0,flag) | is.na(match(0,flag))) %>%
summarise(Date = max(Date))
希望对您有所帮助!!