Соответствие всем датам в кадре данных, которые равны одной из дат в векторе - PullRequest
1 голос
/ 03 марта 2020

У меня есть фрейм данных со столбцом timeDate и другим вектором дат. Я хочу установить новый столбец в моем df равным 1 для всех дат в моем информационном кадре, которые равны одной из дат в моем векторе. Я мог бы сделать двойной для l oop, но должен быть более быстрый способ сделать это правильно? Набор данных очень большой

test <- c("2009-01-01 00:00:00 UTC", "2009-01-02 01:00:00 UTC",
          "2009-01-01 02:00:00 UTC", "2010-12-25 03:00:00 UTC",
          "2009-01-02 04:00:00 UTC", "2009-01-09 05:00:00 UTC")
df <- as.data.frame.POSIXlt(test)

dvec <- as.POSIXlt(c("2009-01-01","2010-12-25"), tz = "GMT")

Ответы [ 2 ]

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

Вы можете сравнить дату test с датами в dvec

df$flag <- +(as.Date(df$test) %in% as.Date(dvec))
df

df
#                 test flag
#1 2009-01-01 00:00:00    1
#2 2009-01-02 01:00:00    0
#3 2009-01-01 02:00:00    1
#4 2010-12-25 03:00:00    1
#5 2009-01-02 04:00:00    0
#6 2009-01-09 05:00:00    0

. + в начале команды изменяет логические значения (TRUE / FALSE) возвращается от %in% к целочисленным значениям (1 / 0) соответственно.

данные

test <- as.POSIXlt(c("2009-01-01 00:00:00 UTC", "2009-01-02 01:00:00 UTC",
                     "2009-01-01 02:00:00 UTC", "2010-12-25 03:00:00 UTC",
               "2009-01-02 04:00:00 UTC", "2009-01-09 05:00:00 UTC"), tz = "GMT")
df <- as.data.frame(test)
dvec <- as.POSIXlt(c("2009-01-01","2010-12-25"), tz = "GMT")
1 голос
/ 03 марта 2020

Вы также можете использовать dplyr:

library(tidyverse)

df %>% 
  dplyr::mutate(valid = as.Date(test) %in% as.Date(dvec))
#>                  test valid
#> 1 2009-01-01 00:00:00 FALSE
#> 2 2009-01-02 01:00:00 FALSE
#> 3 2009-01-01 02:00:00  TRUE
#> 4 2010-12-25 03:00:00  TRUE
#> 5 2009-01-02 04:00:00 FALSE
#> 6 2009-01-09 05:00:00 FALSE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...