在R中按天删除观测值

在R中按天删除观测值,r,dplyr,plyr,lapply,lubridate,R,Dplyr,Plyr,Lapply,Lubridate,我的数据集具有下一个结构 df=structure(list(Data = structure(c(12L, 13L, 14L, 15L, 16L, 17L, 18L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L), .Label = c("01.01.2018", "02.01.2018", "03.01.2018", "04.01.2018", "05.01.2018", "06.01.2018", "07.01.2018", "1

我的数据集具有下一个结构

    df=structure(list(Data = structure(c(12L, 13L, 14L, 15L, 16L, 17L, 
18L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L), .Label = c("01.01.2018", 
"02.01.2018", "03.01.2018", "04.01.2018", "05.01.2018", "06.01.2018", 
"07.01.2018", "12.02.2018", "13.02.2018", "14.02.2018", "15.02.2018", 
"25.12.2017", "26.12.2017", "27.12.2017", "28.12.2017", "29.12.2017", 
"30.12.2017", "31.12.2017"), class = "factor"), sku = 1:18, metric = c(100L, 
210L, 320L, 430L, 540L, 650L, 760L, 870L, 980L, 1090L, 1200L, 
1310L, 1420L, 1530L, 1640L, 1750L, 1860L, 1970L), action = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L)), .Names = c("Data", "sku", "metric", "action"), class = "data.frame", row.names = c(NA, 
-18L))
我需要删除具有特定日期的观察结果。 但在这个数据集中有一个动作变量。action列只有两个值0和1。 关于这些特定日期的意见只应删除零行动类别的意见。 这些日期在单独的数据表中列出

    datedata=structure(list(Data = structure(c(18L, 19L, 20L, 21L, 22L, 5L, 
7L, 9L, 11L, 13L, 15L, 17L, 23L, 1L, 2L, 3L, 4L, 6L, 8L, 10L, 
12L, 14L, 16L), .Label = c("01.05.2018", "02.05.2018", "03.05.2018", 
"04.05.2018", "05.03.2018", "05.05.2018", "06.03.2018", "06.05.2018", 
"07.03.2018", "07.05.2018", "08.03.2018", "08.05.2018", "09.03.2018", 
"09.05.2018", "10.03.2018", "10.05.2018", "11.03.2018", "21.02.2018", 
"22.02.2018", "23.02.2018", "24.02.2018", "25.02.2018", "30.04.2018"
), class = "factor")), .Names = "Data", class = "data.frame", row.names = c(NA, 
-23L))

我该怎么做呢?

我想这会有用的。首先使用match查看df当天和datedata当天是否存在匹配,然后对其进行过滤

library (dplyr)

df <- df %>% mutate (Data.flag = match(Data,datedata$Data)) %>%
    filter(!is.na(Data.flag) & action == 0)
库(dplyr)
df%mutate(Data.flag=match(Data,datedata$Data))%>%
筛选器(!is.na(Data.flag)&操作==0)

我想这会有用的。首先使用match查看df当天和datedata当天是否存在匹配,然后对其进行过滤

library (dplyr)

df <- df %>% mutate (Data.flag = match(Data,datedata$Data)) %>%
    filter(!is.na(Data.flag) & action == 0)
库(dplyr)
df%mutate(Data.flag=match(Data,datedata$Data))%>%
筛选器(!is.na(Data.flag)&操作==0)

解决方案是使用
dplyr::filter
作为:

library(dplyr)
library(lubridate)

df %>% mutate(Data = dmy(Data)) %>%
  filter(action==1 | (action==0 & !(Data %in% dmy(datedata$Data))))

#          Data sku metric action
# 1  2017-12-25   1    100      0
# 2  2017-12-26   2    210      0
# 3  2017-12-27   3    320      0
# 4  2017-12-28   4    430      0
# 5  2017-12-29   5    540      0
# 6  2017-12-30   6    650      0
# 7  2017-12-31   7    760      0
# 8  2018-01-01   8    870      0
# 9  2018-01-02   9    980      1
# 10 2018-01-03  10   1090      1
# 11 2018-01-04  11   1200      1
# 12 2018-01-05  12   1310      1
# 13 2018-01-06  13   1420      1
# 14 2018-01-07  14   1530      1
# 15 2018-02-12  15   1640      1
# 16 2018-02-13  16   1750      1
# 17 2018-02-14  17   1860      1
# 18 2018-02-15  18   1970      1

解决方案是使用
dplyr::filter
作为:

library(dplyr)
library(lubridate)

df %>% mutate(Data = dmy(Data)) %>%
  filter(action==1 | (action==0 & !(Data %in% dmy(datedata$Data))))

#          Data sku metric action
# 1  2017-12-25   1    100      0
# 2  2017-12-26   2    210      0
# 3  2017-12-27   3    320      0
# 4  2017-12-28   4    430      0
# 5  2017-12-29   5    540      0
# 6  2017-12-30   6    650      0
# 7  2017-12-31   7    760      0
# 8  2018-01-01   8    870      0
# 9  2018-01-02   9    980      1
# 10 2018-01-03  10   1090      1
# 11 2018-01-04  11   1200      1
# 12 2018-01-05  12   1310      1
# 13 2018-01-06  13   1420      1
# 14 2018-01-07  14   1530      1
# 15 2018-02-12  15   1640      1
# 16 2018-02-13  16   1750      1
# 17 2018-02-14  17   1860      1
# 18 2018-02-15  18   1970      1

您的第一个data.frame(
df
)没有任何日期列。即使没有列为
action
@MKR我编辑的帖子,请检查它似乎没有要过滤的内容。你能重新检查一下你的数据吗?
df
中提供的唯一日期是2018年01月01日
,日期为
action=0
datedata
中没有相同的日期。因此,不会删除任何内容。您的第一个data.frame(
df
)没有任何日期列。即使没有列为
action
@MKR我编辑的帖子,请检查它似乎没有要过滤的内容。你能重新检查一下你的数据吗?
df
中提供的唯一日期是2018年01月01日
,日期为
action=0
datedata
中没有相同的日期。因此,不会删除任何内容。