Строка символов as.Date с данными дня месяца - PullRequest
0 голосов
/ 14 апреля 2020

Привет. Я пытаюсь определить, произошли ли мои данные в течение предполагаемого рабочего сезона. У меня есть эта функция:

### Get whether or not sighting occurred during the proposed work period
getWork <-function(w) {
    startWork <- as.Date("07-15", format = "%m-%d") #Start of stated work period
    endWork <- as.Date("02-15", format = "%m-%d") #End of stated work period

  ifelse (w >=startWork & w <= endWork, 1, 0)
  }

#convert SightDate to Month-Day
sightingsData$SightMonthDay <- format(sightingsData$SightDate, format="%m-%d")
sightingsData$workPeriod <- getWork(sightingsData$SightMonthDay) #Get Work T/F values for each date

Код функции работает без ошибок, но я получаю ошибку для вывода, как показано ниже:

Error in charToDate(x) : 
  character string is not in a standard unambiguous format 
6. stop("character string is not in a standard unambiguous format") 
5. charToDate(x) 
4. as.Date.character(e1) 
3. as.Date(e1) 
2. `>=.Date`(w, startWork) 
1. getWork(sightingsData$SightMonthDay)

Однако, если я изменю синтаксис функции, совпадающий с синтаксисом создания столбца 'SightMonthDay', (i.e. startwork <- as.Date.... instead of startwork <- format....) Я получаю вывод, но все значения 'getWork', по-видимому, находятся между -1 и 0, однако все наблюдения считаются 0 [False ] что из более чем 23500 наблюдений не соответствует действительности. Вот код для иллюстрации того, что я имею в виду:

getWork <-function(w) {
    startWork <- format("07-15", format = "%m-%d") #Start of stated work period
    endWork <- format("02-15", format = "%m-%d") #End of stated work period
    +(w >=startWork & w <= endWork)
}

#convert SightDate to Month-Day
sightingsData$SightMonthDay <- format(sightingsData$SightDate, format="%m-%d")
sightingsData$workPeriod <- getWork(sightingsData$SightMonthDay) #Get Work T/F values for each date

А вот небольшой скриншот, чтобы показать, что я имею в виду ...

enter image description here

Вот примерный набор данных:

       SightDate SightMonthDay workPeriod
18163 2017-11-15         11-15          0
17120 2017-10-23         10-23          0

> dput(droplevels(SampleData[1:20, ]))
structure(list(SightDate = structure(c(17485, 17462, 17469, 17417, 
17871, 17294, 16712, 15069, 16576, 17416, 17515, 16407, 16399, 
17298, 17164, 17244, 17464, 15628, 16388, 16598), class = "Date"), 
    SightMonthDay = c("11-15", "10-23", "10-30", "09-08", "12-06", 
    "05-08", "10-04", "04-05", "05-21", "09-07", "12-15", "12-03", 
    "11-25", "05-12", "12-29", "03-19", "10-25", "10-15", "11-14", 
    "06-12"), workPeriod = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)), row.names = c(18163L, 
17120L, 17437L, 15597L, 23402L, 14359L, 9874L, 2902L, 8910L, 
15585L, 19641L, 7769L, 7631L, 14399L, 13163L, 13447L, 17297L, 
4511L, 7405L, 9113L), class = "data.frame")

Спасибо за ваше время и помощь !!

1 Ответ

1 голос
/ 14 апреля 2020

Возможно, ваши startWork и endWork заменены.

getWork <-function(w) {
   endWork <- as.Date("07-15", format = "%m-%d") #Start of stated work period
   startWork <- as.Date("02-15", format = "%m-%d") #End of stated work period
   +(w >=startWork & w <= endWork)
}

и примените его к SightMonthDay.

SampleData$new_date <- as.Date(format(SampleData$SightDate, "%m-%d"), "%m-%d")
getWork(SampleData$new_date)

#[1] 0 0 0 0 0 1 0 1 1 0 0 0 0 1 0 1 0 0 0 1
...