我遇到一种情况,我试图使用%in%和!排除日期列表(例如'2018-06-03','2018-06-04')。操作员,但我没有成功。我正在使用的代码:
样本数据
DATE ORDER SALES
2018-06-01 253626 200
2018-06-02 253621 300
2018-06-02 253621 100
2018-06-03 253636 200
2018-06-03 253621 500
2018-06-04 253621 500
2018-06-05 253621 500
var <- data %>% select(order,date,sales) %>%
mutate(weekday = wday(date, label=TRUE)) %>%
filter(!wday(date) %in% c(1, 7) & !(date %in% as.Date(c('2018-06-03','2018-06-04'))) %>%
group_by(day=floor_date(date,"day")) %>%
summarise(sales=sum(sales))
预期产量
dates sales
2018-06-01 500
2018-06-02 400
2018-06-05 500
有什么帮助吗? Tks
答案 0 :(得分:1)
您确定DATE
列包含的值是日期吗?还是字符串?
我测试了下面的代码,它可以工作。在第一种情况下,DATE
是字符串,而在df2
中,DATE_D
是日期。在这两种情况下,都将删除6月3日和4日的记录。
df <- read.table(text = "
DATE ORDER SALES
2018-06-01 253626 200
2018-06-02 253621 300
2018-06-02 253621 100
2018-06-03 253636 200
2018-06-03 253621 500
2018-06-04 253621 500
2018-06-05 253621 500
", header = TRUE, stringsAsFactors = FALSE)
df %>%
filter(!(DATE %in% c("2018-06-03", "2018-06-04")))
df2 <- df %>%
mutate(DATE_D = as.Date(DATE))
df2 %>%
filter(!(DATE_D %in% as.Date(c("2018-06-03", "2018-06-04"))))
答案 1 :(得分:0)
df<-data.frame(date=as.Date(c("2018/06/01","2018/06/01","2018/07/01"),),order=sample(21111:2220,3),sales=sample(100:300,3))
> df
date order sales
1 2018-06-01 6001 185
2 2018-06-01 7494 229
3 2018-07-01 19223 169
#sample df
dates_exclude<-as.Date("2018/06/01") #dates you want to exlude
df[df$date!=dates_exclude,] #df exluding dates
df[!df$date %in% dates_exclude,] #df excluding dates using %in%
df[df$date!=dates_exclude,]
date order sales
3 2018-07-01 19223 169