R:在每年1月初添加垂直线的绘图
我有一个从2015年到现在的工作日数据框架中的每日系列(不包括Sat、Sun):R:在每年1月初添加垂直线的绘图,r,R,我有一个从2015年到现在的工作日数据框架中的每日系列(不包括Sat、Sun): df您几乎拥有了它,您只需要一种方法来确定所有1月的第一个日期,然后将这些日期的向量传递为x abline(v=x) lubridate和dplyr提供了很好的解决方法 # fake data: a sample of dates (in order) and a cumulative series set.seed(123) n <- 200 dat <- data.frame( Date =
df您几乎拥有了它,您只需要一种方法来确定所有1月的第一个日期,然后将这些日期的向量传递为x
abline(v=x)
lubridate和dplyr提供了很好的解决方法
# fake data: a sample of dates (in order) and a cumulative series
set.seed(123)
n <- 200
dat <- data.frame(
Date = sort(sample(seq(from=as.Date('2015-01-01'),
to=as.Date('2018-01-01'),
by='day'),
n)
),
y = cumsum(runif(n, min = -10, max=10)))
# load libraries and add flag for first jan dates
library(dplyr)
library(lubridate)
dat <- dat %>%
# ensure it's sorted by date
arrange(Date) %>%
# group by year and month
group_by(yr = year(Date), mth = month(Date)) %>%
# flag each first January row
mutate(first_jan_row = mth ==1 & row_number()==1)
结果:
请展示一个可复制的小示例,非常感谢。
# fake data: a sample of dates (in order) and a cumulative series
set.seed(123)
n <- 200
dat <- data.frame(
Date = sort(sample(seq(from=as.Date('2015-01-01'),
to=as.Date('2018-01-01'),
by='day'),
n)
),
y = cumsum(runif(n, min = -10, max=10)))
# load libraries and add flag for first jan dates
library(dplyr)
library(lubridate)
dat <- dat %>%
# ensure it's sorted by date
arrange(Date) %>%
# group by year and month
group_by(yr = year(Date), mth = month(Date)) %>%
# flag each first January row
mutate(first_jan_row = mth ==1 & row_number()==1)
# your plot
plot(dat$Date, dat$y, type='l')
# ablines on all first jan dates
abline(v=dat$Date[dat$first_jan_row])