【问题标题】:dplyr keep missing datadplyr 保留丢失的数据
【发布时间】:2018-11-08 09:03:25
【问题描述】:

我建立了与内部 Teradata 数据库的连接。为了让您知道我的问题,我在下面提供了一个示例。

我要做的是按 my_date 过滤列并按 my_key 缩小范围。

但我想保留丢失的结果,但过滤器以某种方式将它们丢弃在我的 my_result 中。如果不可用,下面的代码再次删除它们。正如在 cmets @zx8754 中提到的,我尝试将 is.na(my_date) 添加到过滤器中,但没有成功。我也试过is.emptyis.nullcomplete 而不是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_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

【问题讨论】:

  • 尝试使用 is.na? filter((between(col_date,20180701,20180930) &amp; col_key %in% c(12345,54321)) | is.na(col_date))
  • 欢迎来到 StackOverflow!请阅读有关how to ask a good question 的信息以及如何提供reproducible example。这将使其他人更容易帮助您。
  • @zx8754 谢谢,但是 is.na(col_date) 在没有丢失数据的情况下导致相同的结果。
  • 请提供可重现的数据。所以我们可能会遇到和你一样的问题。

标签: r dplyr na pipes-filters


【解决方案1】:

如果日期不在 个日期之间,则将 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

【讨论】:

    猜你喜欢
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 2022-12-08
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 2021-11-16
    • 2014-12-10
    相关资源
    最近更新 更多