Подмножество данных кадра по строкам, содержащим системную дату - PullRequest
1 голос
/ 17 марта 2020

Я хотел бы установить подкадр данных, выбрав только строки с текущей системной датой.

Например, у меня есть этот кадр данных:

df = data.frame("var" = c("A", "A", "B", "B"),
                "date" = c("2020-03-01", "2020-03-17",
                           "2020-03-01", "2020-03-17"))
df$date = as.POSIXct(df$date, format = "%Y-%m-%d")

Если сегодня 2020 -03-17, я хотел бы поднастроить строки, которые содержат только текущую дату.

Я пробовал следующее:

df_today = df[which(df$date == Sys.Date()),]

, который дает ошибку:

Предупреждающее сообщение: In (df $ date == Sys.Date ()):

Несовместимые методы ("Ops.POSIXt", "Ops.Date") для "=="

Я также пытался:

df[which(df$date == as.POSIXct(Sys.Date())),]

, который возвращает пустой фрейм данных. То, что я нашел, - это если я приведу столбец date как символ, а затем подстроу строки следующим образом:

df$date = as.character(df$date)
df[which(df$date == as.character(Sys.Date)),]

Это может сработать, но я хотел бы знать, где я ошибаюсь мои предыдущие попытки и есть ли лучший способ, чем преобразование назад и вперед между символами и POSIXct?

Заранее спасибо за любой ввод!

Ответы [ 2 ]

1 голос
/ 17 марта 2020
library(dplyr)
df$date = as.Date(df$date, format = "%Y-%m-%d")

df %>% filter(date==Sys.Date())
1 голос
/ 17 марта 2020

Класс "Date" - это не то же самое, что класс "POSIXct", вам нужно сначала преобразовать его в первый, используя локальный Sys.timezone().

df[as.Date(df$date, tz=Sys.timezone()) == Sys.Date(),]
#   var       date
# 2   A 2020-03-17
# 4   B 2020-03-17

Используемые данные

df <- structure(list(var = structure(c(1L, 1L, 2L, 2L), .Label = c("A", 
"B"), class = "factor"), date = structure(c(1583017200, 1584399600, 
1583017200, 1584399600), class = c("POSIXct", "POSIXt"), tzone = "")), row.names = c(NA, 
-4L), class = "data.frame")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...