Как убрать високосный день из последовательности дат в R? - PullRequest
0 голосов
/ 08 апреля 2019

Удалить високосный день в последовательности дат. Пожалуйста, предложите другие простые методы.

Я новичок в R. Здесь я пытаюсь удалить високосный день из моей последовательности дат, однако я получаю ошибку. Пожалуйста, помогите.

Dates=as.data.frame(seq(as.Date("1979-01-01"), to=as.Date("2016-12-31"),by="days"))
names(Dates)= "Dates"
Dates$year=as.numeric(format(Dates$Dates, "%Y"))
Dates$month=as.numeric(format(Dates$Dates, "%m"))
Dates$day=as.numeric(format(Dates$Dates, "%d"))

if [(Dates$month == 2 & Dates$day == 29)]
    Dates=Dates[]

Последовательность дат без високосного дня

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Может быть, вы запутались с данными и векторами?Может рассмотреть ниже код и библиотеки tidyverse и library(lubridate):

> Dates=seq(as.Date("1979-01-01"), to=as.Date("2016-12-31"),by="days")
> find_leap = function(x){
+   day(x) == 29 & month(x) == 2 
+ }
> 
> Dates[find_leap(Dates)]
 [1] "1980-02-29" "1984-02-29" "1988-02-29" "1992-02-29" "1996-02-29"
 [6] "2000-02-29" "2004-02-29" "2008-02-29" "2012-02-29" "2016-02-29"
0 голосов
/ 08 апреля 2019

Здесь вы получите множество ответов с различными пакетами, но вы можете сделать это с помощью базы R и функции format().Вы извлекаете месяц и день, а затем используете отрицание для исключения високосных дат:

myDates <- myDates[!(format(myDates$Dates,"%m") == "02" & format(myDates$Dates, "%d") == "29"), , drop = FALSE]

format() возвращает символы, поэтому нам нужно поместить "02" и "29" в кавычки.

Решение вопроса в комментариях

Приведенный выше код точно выполняет то, что вы спрашиваете:

myDates=data.frame(seq(as.Date("1979-01-01"), to=as.Date("2016-12-31"),by="days"))
names(myDates)= "Dates"
nrow(myDates)
#> [1] 13880
myDates <- myDates[!(format(myDates$Dates,"%m") == "02" & format(myDates$Dates, "%d") == "29"), ,drop = FALSE]
nrow(myDates)
#> [1] 13870

Создано 2019-04-08 пользователем Представить пакет (v0.2.1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...