我有以下数据集
mydata=structure(list(id = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), ad_id = c(111L, 111L, 111L,
111L, 1111L, 1111L, 11111L, 11111L, 11111L, 111L, 111L, 1111L,
1111L, 11111L, 11111L, 11111L, 111111L, 111111L), price = c(1L,
0L, 1L, 0L, 2L, 0L, 3L, 0L, 0L, 1L, 0L, 2L, 0L, 3L, 0L, 0L, 1L,
0L), rev = c(2L, 0L, 0L, 2L, 3L, 3L, 4L, 4L, 4L, 2L, 2L, 3L,
3L, 4L, 4L, 4L, 0L, 0L), data = structure(c(1L, 2L, 2L, 3L, 1L,
3L, 1L, 3L, 4L, 1L, 3L, 1L, 3L, 1L, 3L, 4L, 1L, 3L), .Label = c("01.01.2018",
"01.02.2018", "01.03.2018", "02.03.2018"), class = "factor")), .Names = c("id",
"ad_id", "price", "rev", "data"), class = "data.frame", row.names = c(NA,
-18L))
如何根据以下逻辑创建虚拟变量:
对于每个id
和ad_id
,我需要按数据价格和转速进行汇总。每个ad_id
都有一个日期列(数据)。
如果对于id
和ad_id
中的每个 id ad_id price rev
1 1 111 2 4
2 1 1111 2 6
3 1 11111 3 12
4 1 111111 1 0
和长达90天(数据列-d-m-y)的rev大于价格,则该标志设置为1,否则该标志为0。
在这个可重现的示例中,我仅输入1个id和4个ad_id。
以汇总形式汇总的是视图
id=1
因此对于ad_id
,所有ad_id = 111111
(除ad_id = 111, 1111, 111111
之外)都满足rev> price,因此在初始数据中
111111
必须具有标志= 1,而 id ad_id price rev data flag
1 1 111 1 2 01.01.2018 1
2 1 111 0 0 01.02.2018 1
3 1 111 1 0 01.02.2018 1
4 1 111 0 2 01.03.2018 1
5 1 1111 2 3 01.01.2018 1
6 1 1111 0 3 01.03.2018 1
7 1 11111 3 4 01.01.2018 1
8 1 11111 0 4 01.03.2018 1
9 1 11111 0 4 02.03.2018 1
10 1 111111 1 0 01.01.2018 0
11 1 111111 0 0 01.03.2018 0
必须具有标志= 0。
这是所需的输出:
[error] 33#0: *46 upstream timed out (110:Connection timed out) while connecting to updstream, client:10.1.13.1, server: , request: "GET /api/locations HTTP1.1", upstream: "http://172.30.125.241:9012/locations", host: "rms-ui-dev-rms.dev.alpha.uat.mycompany.com", referrer: "http://rms-ui-dev-rms.dev.alpha.uat.mycompany.com/login"
如何执行这种条件
答案 0 :(得分:1)
我不确定是否正确理解了您,但这是您要寻找的内容吗
library(tidyverse)
mydata %>% as_tibble() %>%
group_by(id, ad_id) %>%
summarise_at(vars("price", "rev"), sum) %>%
mutate(flag = if_else(price > rev, 0, 1)) %>%
select(id, ad_id, flag) %>%
left_join(mydata, ., by = c("id", "ad_id"))