Mam codzienną serię w dataframe z 2015 r., Aby zaprezentować dni robocze (wyklucza SAT, Sun):

df <- df[, c("Date","y")] 

Mogę wykreślić wykres:

Działka (DF $ Data, DF $ Y, Type = "L")

Mogę również wykreślić pionowe linie:

ABLINE (V = X)

Ale jak mogę wykryć pionową linię na pierwszą dacie stycznia każdego roku w serii (może to być inne od 01 stycznia).

Dziękuję za pomoc.

r
0
adam.888 14 styczeń 2020, 22:05

1 odpowiedź

Najlepsza odpowiedź

Prawie masz to, wystarczy sposób określić wszystkie pierwsze daty styczni

abline(v=x)

Lubridate i DPLYR zapewniają ładne sposoby, aby to rozgryźć.

# 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)

Teraz możesz je dziwi:

# your plot
plot(dat$Date, dat$y, type='l')
# ablines on all first jan dates
abline(v=dat$Date[dat$first_jan_row])

Wynik:

enter image description here

1
arvi1000 14 styczeń 2020, 20:03