我想过滤的时间序列,其中有不止一个给定的每月只发生在最后一天的条目。
作为像这样的表的一个示例:
obs <- c("A", "B", "A", "B", "A", "B", "A", "B")
date <- c("2017-01-01", "2017-01-01", "2017-02-01", "2017-02-01", "2017-03-01", "2017-03-01", "2017-03-02","2017-03-02")
num <- c(1000, 1800, 2000, 2900, 3000, 3400, 3500, 3400)
dat <- data.frame(obs, date, num)
obs date num
1 A 2017-01-01 1000
2 B 2017-01-01 1800
3 A 2017-02-01 2000
4 B 2017-02-01 2900
5 A 2017-03-01 3000
6 B 2017-03-01 3400
7 A 2017-03-02 3500
8 B 2017-03-02 3400
对于“A”一个简单的选择是:
x <- dat %>%
filter(obs=="A") %>%
select(obs, date, num) %>%
mutate(date = ymd(date))
obs date num
1 A 2017-01-01 1000
2 A 2017-02-01 2000
3 A 2017-03-01 3000
4 A 2017-03-02 3500
所以,现在有第三个月两个项目,我想只保留当月最新的条目。 我认为这将是这样做的我做了一个简单的事情:
x <- dat %>%
filter(obs=="A") %>%
select(obs, date, num) %>%
mutate(date = ymd(date)) %>%
arrange(date) %>%
slice(which.max(date))
但我得到的只是最后一个条目,而不是去掉其他的。 我在想什么? 输出应该是:
obs date num
1 A 2017-01-01 1000
2 A 2017-02-01 2000
4 A 2017-03-02 3500