#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"))