首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

dplyr案
EN

Stack Overflow用户
提问于 2018-05-26 11:05:31
回答 1查看 5.5K关注 0票数 0

我想加入两个数据集,如果日期在StartDate和EndDate之间,则在第一个数据集中,1作为库伦名称pros_sales添加。下面是我的数据集

代码语言:javascript
运行
复制
data1=data.frame(Date=as.Date("2015-06-28"),Storecode=34)
data2=data.frame(Promo=c("Promo1","Promo2","Promo3","Promo4")
,StartDate=c("2015-02-10","2015-03-15"," 2015-05-24","2015-06-21")
,EndDate=c("2015-02-17","2015-03-22","2015-06-01","2015-06-28"))
data1$Date <- as.Date(data1$Date) 
data2$StartDate <- as.Date(data2$StartDate) 
data2$EndDate <- as.Date(data2$EndDate) 

下面是我想要的数据集;

代码语言:javascript
运行
复制
 Date Storecode  Promo  StartDate    EndDate         pro_sales
2015-06-28        34 Promo1 2015-02-10 2015-02-17         0
2015-06-28        34 Promo2 2015-03-15 2015-03-22         0
2015-06-28        34 Promo3 2015-05-24 2015-06-01         0
2015-06-28        34 Promo4 2015-06-21 2015-06-28         1

下面是我的代码,但它将1添加到所有pro_sales中。

代码语言:javascript
运行
复制
 data.frame( data1 %>%
         mutate(dummy=TRUE) %>%
         left_join(data2 %>% mutate(dummy=TRUE)) %>% 
         mutate(pro_sales = case_when(
           Date>=StartDate | Date<=EndDate ~ 1,
           FALSE ~ 0)))

你能帮帮我吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-26 15:14:13

这个怎么样?

代码语言:javascript
运行
复制
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
data1=data.frame(Date=as.Date("2015-06-28"), Storecode=34, tmp = 1)
data2=data.frame(Promo=c("Promo1","Promo2","Promo3","Promo4"),
                 StartDate=c("2015-02-10","2015-03-15"," 2015-05-24","2015-06-21"),
                 EndDate=c("2015-02-17","2015-03-22","2015-06-01","2015-06-28"),
                 tmp = 1)
data1$Date <- as.Date(data1$Date) 
data2$StartDate <- as.Date(data2$StartDate) 
data2$EndDate <- as.Date(data2$EndDate) 


full_join(data1, data2, by = "tmp") %>% 
     select(-tmp) %>% 
     mutate(pro_sales = case_when(
          Date>=StartDate & Date<=EndDate ~ 1,
          TRUE ~ 0))
#>         Date Storecode  Promo  StartDate    EndDate pro_sales
#> 1 2015-06-28        34 Promo1 2015-02-10 2015-02-17         0
#> 2 2015-06-28        34 Promo2 2015-03-15 2015-03-22         0
#> 3 2015-06-28        34 Promo3 2015-05-24 2015-06-01         0
#> 4 2015-06-28        34 Promo4 2015-06-21 2015-06-28         1

由reprex包创建于2018-05-26 (v0.2.0)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50542086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档