首页 > 解决方案 > 从数据框中提取特定日期不存在的行

问题描述

我有一个数据框:

Date          Agent
2020-02-10    A
2020-02-11    A
2020-02-12    A
2020-02-13    A
2020-02-14    A
2020-02-10    B
2020-02-12    B
2020-02-10    C
2020-02-11    C
2020-02-14    C

我想获得一个数据框,其中包含从 2020 年 2 月 10 日到 2020 年 2 月 14 日某些日子不存在的那些行。所以想要的输出是:

Agent  Days_absent
B      2020-02-11; 2020-02-13; 2020-02-14
C      2020-02-12; 2020-02-13 

或者

Date          Agent
2020-02-11    B
2020-02-13    B
2020-02-14    B
2020-02-12    C
2020-02-13    C

我怎么能这样做?

标签: rdataframe

解决方案


reshape2::melt这是使用and的一种相当简单的方法dplyr

library(dplyr)
library(reshape2)

melt(table(df$Date, df$Agent)) %>% 
  filter(value == 0) %>% 
  select(Date = Var1, Agent = Var2, -value)
#>         Date Agent
#> 1 2020-02-11     B
#> 2 2020-02-13     B
#> 3 2020-02-14     B
#> 4 2020-02-12     C
#> 5 2020-02-13     C


数据

df <- structure(list(Date = structure(c(18302, 18303, 18304, 18305, 
18306, 18302, 18304, 18302, 18303, 18306), class = "Date"), Agent = c("A", 
"A", "A", "A", "A", "B", "B", "C", "C", "C")), row.names = c(NA, 
-10L), class = "data.frame")

推荐阅读