Как удалить все строки во фрейме данных до определенной отметки времени?

#r #dataframe #dplyr #timestamp

Вопрос:

У меня есть рамка данных, и первая колонка — «дата» в формате YYYY-MM-DD HH:MM:SS .

Я хочу иметь возможность удалить все строки во фрейме данных, которые предшествуют определенной дате и времени?

Так, например, если ниже я хочу удалить все строки до 2021-07-19 11:30:30. Как мне это сделать?

Время, которое я хочу указать, также сохраняется в среде как переменная, известная как «дата начала».

 date
2021-07-19 11:30:00
2021-07-19 11:30:15
2021-07-19 11:30:30
2021-07-19 11:30:45
2021-07-19 11:31:00
 

Ответ №1:

Вы могли бы использовать

 library(dplyr)

df %>% 
#  filter(date >= as.POSIXct("2021-07-19 11:30:30"))
  filter(date >= "2021-07-19 11:30:30") # thanks to ThomasIsCoding: as.POSIXct isn't necessary
 

который возвращает

                  date
1 2021-07-19 11:30:30
2 2021-07-19 11:30:45
3 2021-07-19 11:31:00
 

Комментарии:

1. Я думаю, что это должно сработать даже без as.POSIXct 🙂

2. Вы правы! Не знал, что в этом as.POSICxt нет необходимости.

3. Похоже, это не работает, и фрейм данных в моей среде по-прежнему содержит все строки.

4. @Джеймс (1) Не могли бы вы предоставить свои данные как dput(head(YourData)) ? Отредактируйте свой вопрос и поместите туда данные. (2) Ваши данные.фрейм в вашей среде не изменяется, если вы не присвоите показанный код фрейму данных. Может ли это быть причиной?

Ответ №2:

Я бы использовал пакет lubridate вместе с dplyr . lubridate предназначен для выполнения операций с датой и временем.

Повторяю ваш пример:

 library(lubridate)
library(dplyr)

dates <- c("2021-07-19 11:30:00","2021-07-19 11:30:15","2021-07-19 11:30:30",
           "2021-07-19 11:30:45","2021-07-19 11:31:00")

#coerce string to Date and Time
dates <- ymd_hms(dates) #which means year, month, day, hour, minute and second

df <- data.frame(date = dates)

df %>% filter(date >= ymd_hms("2021-07-19 11:30:30"))