Подмножество данных с форматом даты "01.01.2009 08:00:00, 01.01.2009 9:00:00, ..." - PullRequest
0 голосов
/ 24 марта 2020

В настоящее время я пытаюсь установить подмножество данных из моего набора данных. Я использовал dput и str, чтобы вы могли видеть, с чем я работаю:

dput:

structure(list(Date = structure(1:10, .Label = c("01.01.2009 00:00:00", 
"01.01.2009 01:00:00", "01.01.2009 02:00:00", "01.01.2009 03:00:00", 
"01.01.2009 04:00:00", "01.01.2009 05:00:00", "01.01.2009 06:00:00", 
"01.01.2009 07:00:00", "01.01.2009 08:00:00", "01.01.2009 09:00:00"
), class = "factor"), SWC = c(NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
NaN, NaN, NaN)), row.names = c(NA, 10L), class = "data.frame")

str:

'data.frame':   8756 obs. of  2 variables:
 $ Date: Factor w/ 96408 levels "01.01.2009 00:00:00",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ SWC : num  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...

Как видите, мои даты имеют формат "ДД ММ ГГ ЧЧ ММ СС". Для подмножества моих данных я попытался использовать функцию subset() (см. Ниже).

Mois2009_2 <- subset(Mois1$Date <= "31.12.2009 23:00:00") 

Но я получил следующую ошибку:

In Ops.factor(Mois1$Date, "31.12.2009 23:00:00") :
      ‘<=’ not meaningful for factors

Я посмотрел на ошибку и обнаружил, что мне нужно конвертировать даты, используя

as.Date(Mois1$Date)

, что привело к другой ошибке , в которой говорится:

Character string is not in a unique standard format.

Я только начал работать с R, поэтому буду признателен за помощь!

Ответы [ 2 ]

2 голосов
/ 24 марта 2020

Вы можете решить это следующим образом:

Mois1 <- structure(list(Date = structure(1:10, .Label = c("01.01.2009 00:00:00", 
                   "01.01.2009 01:00:00", "01.01.2009 02:00:00", "01.01.2009 03:00:00", 
                   "01.01.2009 04:00:00", "01.01.2009 05:00:00", "01.01.2009 06:00:00", 
                   "01.01.2009 07:00:00", "01.01.2009 08:00:00", "01.01.2009 09:00:00"
                   ), class = "factor"), SWC = c(NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
                   NaN, NaN, NaN)), row.names = c(NA, 10L), class = "data.frame")

Mois1$Date <- as.Date(Mois1$Date, format = "%d.%m.%Y %H:%M:%S")
Mois2009_2 <- subset(Mois1, Date <= "2009-12-31 23:00:00")
0 голосов
/ 24 марта 2020

Мы можем использовать filter от dplyr

library(dplyr)
library(lubridate)
df1 %>%
    filter(dmy_hms(Date) <= "2009-12-31 23:00:00")
...