【发布时间】:2019-04-25 16:12:29
【问题描述】:
以下数据捕获每个 Adv (Adv_Code) 的每月 OPN(最佳产品编号)。 Change_Dt 捕获 Adv 状态从 A 更改为 B 的月份。
变更月份之前,所有 OPN 都属于 adv 的 A 状态,而当月之后,所有 OPN 都属于 B 状态。
以下是现有数据
Adv_Code Change_Dt April_OPN May_OPN June_OPN July_OPN Aug_OPN Sep_OPN Oct_OPN Nov_OPN Dec_OPN Jan_OPN Feb_OPN March_OPN
A201 April 0 0 0 0 0 0 0 0 0 0 0 0
A198 July 2 0 0 1 2 0 5 0 0 0 0 0
S1212 Nov 0 3 4 0 0 3 0 1 0 0 0 0
我想通过转换为长格式并根据 OPN 月份创建 Adv_Status 来创建以下数据结构。即如果 Month_OPN 是
Month_OPN 就是从 4 月到 3 月,即 12 个月。
OPN 捕获每个 Adv 的每月 OPN。因此它是每个 Adv 的 April NOP 到 Mar NOP 列中的值的转置。
预期输出:
Agent_Code Change_Dt Month_OPN Adv_Status OPN
S1198201 April April B 0
S1198201 April May B 0
S1198201 April June B 0
S1198201 April July B 0
S1198201 April Aug B 0
S1198201 April Sep B 0
S1198201 April Oct B 0
S1198201 April Nov B 0
S1198201 April Dec B 0
S1198201 April Jan B 0
S1198201 April Feb B 0
S1198201 April Mar B 0
S1198203 July April A 2
S1198203 July May A 0
S1198203 July June A 0
S1198203 July July B 1
S1198203 July Aug B 2
S1198203 July Sep B 0
S1198203 July Oct B 5
S1198203 July Nov B 0
S1198203 July Dec B 0
S1198203 July Jan B 0
S1198203 July Feb B 0
S1198203 July Mar B 0
S1198212 Nov April A 0
S1198212 Nov May A 3
S1198212 Nov June A 4
S1198212 Nov July A 0
S1198212 Nov Aug A 0
S1198212 Nov Sep A 3
S1198212 Nov Oct A 0
S1198212 Nov Nov B 1
S1198212 Nov Dec B 0
S1198212 Nov Jan B 0
S1198212 Nov Feb B 0
S1198212 Nov Mar B 0
有人可以帮我在 R 中做到这一点吗?
【问题讨论】:
-
如何在预期中创建“Adv_Status”列
-
能否解释一下创建该列的逻辑
-
底层逻辑是捕捉adv状态从A到B的变化时间,可以是Apr到Mar的任意月份,而那个月份的变化由Change_Dt捕捉到。
-
试试
df1 %>% gather(key, OPN, April_OPN:March_OPN) %>% separate(key, into = c("Month_OPN", "key2")) %>% select(-key2) %>% mutate(Adv_Status = case_when(Change_Dt %in% c("April", "Nov") ~ "B", TRUE ~ "A")) -
那么与Nov相比的最后几个月不应该是
B吗?