我是R的新手并且很难有所作为。我有一个数据框,其中包含日期和广告位置的名称。
我有另一个表格,其中包含开始日期,结束日期,广告展示位置的名称和费率。
我基本上需要引用rate键并根据日期和位置名称将vlookup(left_join)应用于我的数据框,考虑到我的引用表中diff日期范围可能出现的不同速率。
到目前为止,我一直在使用dplyr进行广泛的移动,但这是迄今为止我遇到过的最困难的事情。最初的想法是,我可能需要将每个可能的日期范围设置为自己的表并将left_join应用于df,但我不确定。
示例:
参考表
placement start end rate
NewYorkTimes_iPhone 2018-06-01 2018-06-25 5
NewYorkTimes_iPhone 2018-06-26 2018-06-30 7
期望的结果
placement date rate
NewYorkTimes_iPhone 2018-06-15 5
基本上在数据框中,费率列将丢失。我需要它来搜索参考表以查找共享位置,并查看日期是否在密钥
中的范围之间任何帮助表示赞赏!这是我的第一个项目,我通过DataCamp在线学习了一切。
谢谢!
泰勒
答案 0 :(得分:0)
> ref_tbl <-
+ tibble(
+ placement = c("NewYorkTimes_iPhone","NewYorkTimes_iPhone"),
+ start = c("2018-06-01","2018-06-26"),
+ end = c("2018-06-25","2018-06-30"),
+ rate = c(5,7)
+ ) %>%
+ mutate_at(vars(start, end),as.Date)
> des_tbl <-
+ tibble(
+ placement = "NewYorkTimes_iPhone",
+ date = "2018-06-15",
+ rate = 5
+ ) %>%
+ mutate(date = as.Date(date))
> ref_tbl
# A tibble: 2 x 4
placement start end rate
<chr> <date> <date> <dbl>
1 NewYorkTimes_iPhone 2018-06-01 2018-06-25 5
2 NewYorkTimes_iPhone 2018-06-26 2018-06-30 7
> des_tbl
# A tibble: 1 x 3
placement date rate
<chr> <date> <dbl>
1 NewYorkTimes_iPhone 2018-06-15 5
>
> ref_tbl %>%
+ left_join(des_tbl, by = c("placement","rate")) %>%
+ mutate(
+ ifelse(date %within% interval(start,end),1,0)
+ )
# A tibble: 2 x 6
placement start end rate date `ifelse(date %wit~
<chr> <date> <date> <dbl> <date> <dbl>
1 NewYorkTimes_iPhone 2018-06-01 2018-06-25 5 2018-06-15 1
2 NewYorkTimes_iPhone 2018-06-26 2018-06-30 7 NA NA
>
以下是一些评论。
对于左连接表,我们需要获得date
介于start
和end
之间的结果。
这里来自%within%
包的函数interval
和lubridate
是一个解决方案。