dplyr пропустить данные - PullRequest
       20

dplyr пропустить данные

0 голосов
/ 08 ноября 2018

Я установил соединение с внутренней базой данных Teradata. Чтобы сообщить вам мою проблему, я привел приведенный ниже пример.

Я пытаюсь отфильтровать столбцы по my_date и сузить их до my_key .

Но я бы хотел сохранить пропущенные результаты, но фильтр каким-то образом сбрасывает их в мой my_result . Снова в настоящее время приведенный ниже код удаляет их, если они недоступны. Как упоминалось в комментариях @ zx8754, я пытался добавить is.na(my_date) к фильтру, но безуспешно. Я также попробовал is.empty, is.null, complete вместо collect.

Любая помощь будет высоко ценится.

Воспроизводимый тест

# Create my_df
my_key <- c(1, 2, 3,4)
my_date <- as.Date(c('2018-07-01','2018-08-01','2018-09-01','2018-09-01'))
my_df <- data.frame(my_date, my_key)

# Filter_mydf
my_result <- my_df %>% 
  select (my_date,my_key)%>%
  filter(between(my_date ,as.Date("2018-08-01"),as.Date("2018-09-01")),
         my_key %in% c(1,2,3))%>%
  collect()

my_result

my_date my_key
2018-08-01 2
2018-09-01 3

Желаемый my_result

my_date my_key
NA 1
2018-08-01 2
2018-09-01 3

1 Ответ

0 голосов
/ 14 ноября 2018

Установите my_date на NA, если дата не между датами, затем выберите my_key :

# Create my_df
my_df <- data.frame(
  my_date = as.Date(c('2018-07-01','2018-08-01','2018-09-01','2018-09-01')),
  my_key = c(1, 2, 3, 4, 5))


library(dplyr)

my_df %>% 
  mutate(my_date = if_else(between(my_date, as.Date("2018-08-01"), as.Date("2018-09-01")) & 
                             my_key %in% c(1, 2, 3), my_date, as.Date(NA))) %>% 
  filter(my_key %in% c(1, 2, 3))

#      my_date my_key
# 1       <NA>      1
# 2 2018-08-01      2
# 3 2018-09-01      3
...