Найти строки в кадре данных с определенной датой, используя подмножество
У меня есть дата-дата, содержащая даты, время и значения:
Date Time Global_active_power
16/12/2006 17:24:00 4.216
16/12/2006 18:25:00 4.5
17/12/2006 17:25:00 4.52
18/12/2006 17:25:00 4.557
Теперь я хочу найти строку в зависимости от даты - например, все строки с датой> 16/12/2006.
Это мой код:
Data$Date<- as.Date(Data$Date,"%dd%mm%yyyy" )
Data$Time<-strptime(Data$Time, "%h%m%s")
print(class(Data$Date))
print(class(Data$Time))
Data1<-subset(Data, (Date=="16/12/2006" ))
View(Data1)
класс даты и времени был фактором и фактором, но теперь они являются датой и "POSIXlt", "POSIXt" . Когда я делаю команду подмножества, Data1 пуст.
Зачем? Он должен содержать первые 2 набора данных.
2 ответа
Data$Date<- as.Date(Data$Date,"%d/%m/%Y" ) # date format now 'yyyy-mm-dd'
Data$Time <- as.POSIXct(strptime(Data$Time, "%H:%M:%S"))
print(class(Data$Date))
print(class(Data$Time))
Data1 <- subset(Data, Date > "2006-12-16")
View(Data1)
Существует проблема с преобразованием Time
переменная. Поскольку у него нет даты, просто время, когда вы подаете заявку strptime
, он вставит автоматически дату, сегодня. Это явно не то, что вы хотите. Я считаю, что лучшее решение - это создать новую колонку, DateTime
,
Data$Date <- as.Date(Data$Date, "%d/%m/%Y")
# See the output date (today)
strptime(Data$Time, "%H:%M:%S")
[1] "2017-07-22 17:24:00 BST" "2017-07-22 18:25:00 BST"
[3] "2017-07-22 17:25:00 BST" "2017-07-22 17:25:00 BST"
DateTime <- paste(Data$Date, Data$Time)
DateTime
[1] "2006-12-16 17:24:00" "2006-12-16 18:25:00" "2006-12-17 17:25:00"
[4] "2006-12-18 17:25:00"
Data$DateTime <- as.POSIXct(DateTime, format = "%Y-%m-%d %H:%M:%S")
Data1 <- subset(Data, Date > as.Date("2006-12-16"))
View(Data1)
Если вы хотите сохранить переменные, связанные с данными / временем, вы можете поменять местами столбцы 3 и 4.
Data <- Data[, c(1, 2, 4, 3)]
Data
Date Time DateTime Global_active_power
1 2006-12-16 17:24:00 2006-12-16 17:24:00 4.216
2 2006-12-16 18:25:00 2006-12-16 18:25:00 4.500
3 2006-12-17 17:25:00 2006-12-17 17:25:00 4.520
4 2006-12-18 17:25:00 2006-12-18 17:25:00 4.557
Только тогда вы бы Data1 <- subset(...)
,