我建立了与内部Teradata DB的连接。为了让您知道我的问题,我在下面提供了一个示例。
我想做的是按 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
答案 0 :(得分:0)
如果日期不在 日期之间,请将 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