【问题标题】:Append missing dates for each combination excluding result column为不包括结果列的每个组合附加缺失的日期
【发布时间】:2019-11-20 05:00:24
【问题描述】:

如何为分组的几列附加日期。 请在下面找到预期输出和电流 1

虽然这些都是类似的问题, 在这种情况下,考虑这些列的分组是不同的:

Using tidyr::complete with group_by

R / tidyr::complete - filling missing values dynamically

Library (tidyverse)
sample_data <- tribble (~A, ~B, ~C, ~ Date, ~ Result,
     "AL",123,"12", as.Date ("2014-02-01"), 12345,
     "AL",123,"12", as.Date ("2014-04-01"), 12349,
     "AL",123,"12", as.Date ("2014-06-01"), 12977,
     "AZ",123,"12", as.Date ("2014-01-01"),23435,
     "AZ",123,"12", as.Date ("2014-04-01"),453454,
     "AZ",123,"12", as.Date ("2014-07-01"),123976)

sample_data %<>% complete (Date = seq.Date (min (Date), max (Date), by="month")
# Output
> sample_data
# A tibble: 8 x 5
  Date       A         B C     Result
  <date>     <chr> <dbl> <chr>  <dbl>
1 2014-01-01 AZ      123 12     23435
2 2014-02-01 AL      123 12     12345
3 2014-03-01 NA       NA NA        NA
4 2014-04-01 AL      123 12     12349
5 2014-04-01 AZ      123 12    453454
6 2014-05-01 NA       NA NA        NA
7 2014-06-01 AL      123 12     12977
8 2014-07-01 AZ      123 12    123976

# Tried but
sample_data %>%
  group_by (A, B, C) %>%
  mutate (tidyr:: complete (Date = seq.Date (min (Date), max (Date), by="month")

# Expected output
expected_output <-tribble (~A, ~B, ~C, ~ Date, ~ Result,
     "AL",123,"12", as.Date ("2014-01-01"), NA,
     "AL",123,"12", as.Date ("2014-02-01"), 12345,
     "AL",123,"12", as.Date ("2014-03-01"), NA,
     "AL",123,"12", as.Date ("2014-04-01"), 12349,
     "AL",123,"12", as.Date ("2014-05-01"), NA,
     "AL",123,"12", as.Date ("2014-06-01"), 12977,
     "AL",123,"12", as.Date ("2014-07-01"), NA,
     "AZ",123,"12", as.Date ("2014-01-01"),23435,
     "AZ",123,"12", as.Date ("2014-02-01"),NA,
     "AZ",123,"12", as.Date ("2014-03-01"),NA,
     "AZ",123,"12", as.Date ("2014-04-01"),453454,
     "AZ",123,"12", as.Date ("2014-05-01"),NA,
     "AZ",123,"12", as.Date ("2014-06-01"),NA,
     "AZ",123,"12", as.Date ("2014-07-01"),123976)

【问题讨论】:

标签: r tidyverse tidyr


【解决方案1】:

一种选择是使用group_by 并使用整个“日期”列中的minmax,而不是每个组的minmax

library(dplyr)
library(tidyr)
sample_data %>% 
   group_by(A, B, C) %>% 
   complete(Date = seq.Date(min(.$Date), max(.$Date), by="month"))
# A tibble: 14 x 5
# Groups:   A, B, C [2]
#   A         B C     Date       Result
#   <chr> <dbl> <chr> <date>      <dbl>
# 1 AL      123 12    2014-01-01     NA
# 2 AL      123 12    2014-02-01  12345
# 3 AL      123 12    2014-03-01     NA
# 4 AL      123 12    2014-04-01  12349
# 5 AL      123 12    2014-05-01     NA
# 6 AL      123 12    2014-06-01  12977
# 7 AL      123 12    2014-07-01     NA
# 8 AZ      123 12    2014-01-01  23435
# 9 AZ      123 12    2014-02-01     NA
#10 AZ      123 12    2014-03-01     NA
#11 AZ      123 12    2014-04-01 453454
#12 AZ      123 12    2014-05-01     NA
#13 AZ      123 12    2014-06-01     NA
#14 AZ      123 12    2014-07-01 123976

【讨论】:

    猜你喜欢
    • 2021-10-10
    • 2018-02-12
    • 2020-01-31
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多