r - 按日期范围熔化数据
问题描述
我遇到了有关正确熔化数据的 RStudio 数据问题。它目前采用以下形式:
广告系列、ID、开始日期、结束日期、总天数、总支出、总展示次数、总转化次数
我希望我的数据如下所示:
广告系列、ID、日期、支出、展示次数、转化次数
每个“日期”应包含广告系列运行的特定日期,而支出、展示次数和转化次数应分别等于总支出/总天数、总印象数/总天数和总转化次数/总天数。
我在 RStudio 工作,因此需要 R 中的解决方案。有没有人有这样处理数据的经验?
解决方案
这有效,但不是特别有效。如果您的数据是数百万行或更多行,那么使用 SQL 和不等式连接会更好。
library(tidyverse)
#create some bogus data
data <- data.frame(ID = 1:10,
StartDate = sample(seq.Date(as.Date("2018-01-01"), as.Date("2018-12-31"), "day"), 10),
Total = runif(10)) %>%
mutate(EndDate = StartDate + floor(runif(10) * 14))
#generate all dates between the min and max in the dataset
AllDates = data.frame(Date = seq.Date(min(data$StartDate), max(data$EndDate), "day"),
Dummy = TRUE)
#join via a dummy variable to add rows for all dates to every ID
data %>%
mutate(Dummy = TRUE) %>%
inner_join(AllDates, by = c("Dummy" = "Dummy")) %>%
#filter to just the dates between the start and end
filter(Date >= StartDate, Date <= EndDate) %>%
#divide the total by the number of days
group_by(ID) %>%
mutate(TotalPerDay = Total / n()) %>%
select(ID, Date, TotalPerDay)
# A tibble: 91 x 3
# Groups: ID [10]
ID Date TotalPerDay
<int> <date> <dbl>
1 1 2018-06-21 0.00863
2 1 2018-06-22 0.00863
3 1 2018-06-23 0.00863
4 1 2018-06-24 0.00863
5 1 2018-06-25 0.00863
6 1 2018-06-26 0.00863
7 1 2018-06-27 0.00863
8 1 2018-06-28 0.00863
9 1 2018-06-29 0.00863
10 1 2018-06-30 0.00863
# ... with 81 more rows
推荐阅读
- java - 无法执行目标 org.codehaus.mojo:exec-maven-plugin:1.2.1:exec 错误与 neo4j
- c# - 从一维数组查看 Reportviewer 中的数据表
- vba - 在 VBA 中引用多个“模板”工作表
- php - 创建一个从 mysqli 查询的结果分成两部分的数组
- c - 如何在 C 中创建指针数组?
- node.js - 我的数据库未在 Sequelize 中更新
- python - Tensorflow Estimator API 输入张量名称
- r - 总结每行数据帧中记录的比例
- mysql - 为什么 information_schema 中的 data_length 不能反映实时数据长度?
- amazon-web-services - .Net RabbitMQ 客户端是否在 .Net Core 2.0 中工作。AWS Lambda 函数?