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

Я пытаюсь получить подмножество фрейма данных с диапазоном дат и форматом «2016-10-01 00:00».

Ниже приведен мой текущий код, но он выдаетошибка:

Warning messages:
1: In which(classsched$DateTime >= x & classsched$DateTime <= y) :
Incompatible methods ("Ops.factor", "Ops.Date") for ">="
2: In which(classsched$DateTime >= x & classsched$DateTime <= y) :
Incompatible methods ("Ops.factor", "Ops.Date") for "<="

Мой код:

dateFunction <- function(x,y){
  classsched[which(classsched$DateTime >= x & classsched$DateTime <=y)]
}

date1 = as.Date('2016-10-01 00:00', format="%Y-%m-%d %H:%M")
date2 = as.Date('2017-10-31 23:59', format="%Y-%m-%d %H:%M")

test <- dateFunction(date1, date2)

Мой набор данных:

 DateTime            Course    Professor-in-Time
2016-01-01 11:10    CS        Morgan
2016-10-03 12:16    Eng       Andrew
2017-05-05 13:17    Poetry    Jen
2018-04-15 14:11    Reading   Eugene
2018-05-20 15:21    Math      Matt

DateTime <- as.Date(c('2016-01-01 11:10','2016-10-03 12:16','2017-05-05
13:17', '2018-04-15 14:11', '2018-05-20 15:21'))
Course <- c('CS','Eng','Poetry', 'Reading', 'Math')
Professor-in-Time <- c('Morgan', 'Andrew', 'Jen', 'Eugene', 'Matt')
classsched <- dataframe(DateTime, Course, Professor-in-Time)

Таким образом, вывод должен быть:

 DateTime            Course    Professor-in-Time
2016-10-03 12:16    Eng       Andrew
2017-05-05 13:17    Poetry    Jen

Я основал свой код на вопросе переполнения стека Подмножество данных между двумя датами .

1 Ответ

0 голосов
/ 21 октября 2018

Как насчет этого?

Прежде всего, вы должны предоставить некоторые данные, которые легче воспроизвести , например, использовать dput .Во-вторых, ваши форматы даты перепутаны.

library(tidyverse)
library(lubridate)

df <- tibble(DateTime = dmy_hm("01/1/2016 11:10", "03/10/2016 12:16", "05/05/2017 13:17", "15/04/2018 14:11", "20/05/2018 15:21"),
             Course = c("CS", "Eng", "Poetry", "Reading", "Maths"),
             Prof_in_time = c("Morgan", "Andrew", "Jen", "Eugene", "Matt"))
df #note typos in the date format in your data

Тогда вы можете сделать это:

start <- dmy_hm("01/1/2016 00:00") #note you had different formats
end <- dmy_hm("31/10/2016 23:59")

df2 <- df %>% 
  filter(DateTime >= start & DateTime <= end)
df2

Это отфильтрует ваши даты.Это может не совпадать с вашим, так как я играл с форматами даты.

Или вы можете сделать это вместо этого:

df3 <- df %>% 
  filter(DateTime >= dmy_hm("01/1/2016 00:00") & DateTime <= dmy_hm("31/10/2016 23:59"))
df3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...