在我从R导出并手动在Excel中添加Segment列之后,我有一些看起来像这样的原始数据。
原始数据被拉入excel
我想在R中编写代码,为我添加Segment。
数据描述......
ID: Random distinct numbers
flag: Yes or No
Period: 0-12 Mths or 12-24 Mths
Spend Group: High, Medium or Low
规则...
Flag = Yes
Period = 0-12 Mths
Spend Group = High
Then Segment = G01
Flag = Yes
Period = 0-12 Mths
Spend Group = Medium
Then Segment = G02
Flag = Yes
Period = 0-12 Mths
Spend Group = Low
Then Segment = G03
Flag = Yes
Period = 12-24 Mths
Spend Group = High
Then Segment = G04
......依此类推,直到所有变量都被计算在内
我希望代码在每次处理数据时识别差异,例如,标志不会总是为是或否。有时每行都会为是。
我的完整数据集总结如下图所示。
摘要数据
你将如何开始在R中编码?
答案 0 :(得分:1)
最重要的是,合并似乎是正确的方式。
combine = merge(raw_data,summary_data,by.x = c(“flag”,“period”,“spend_group”),by.y = c(“flag”,“recency”,“spend_band”))< / p>
答案 1 :(得分:0)
我会用四步ifelse()
来完成。
您在四个子集Flag == "yes" & Recency == "0-12 Mths"
,Flag == "yes" & Recency == "12-24 Mths"
,Flag == "no" & Recency == "0-12 Mths"
和Flag == "no" & Recency == "12-24 Mths"
中引用您的数据并启动ifelse()
来电:
mydata$Segment[mydata$Flag == "yes" & mydata$Recency == "0-12 Mths"] <- with(mydata[mydata$Flag == "yes" & mydata$Recency == "0-12 Mths", ],
ifelse(Spend Band == "High", "G01",
ifelse(Spend Band == "Medium", "G02", "G03")))
mydata$Segment[mydata$Flag == "yes" & mydata$Recency == "12-24 Mths"] <- with(mydata[mydata$Flag == "yes" & mydata$Recency == "12-24 Mths", ],
ifelse(Spend Band == "High", "G04",
ifelse(Spend Band == "Medium", "G05", "G06")))
mydata$Segment[mydata$Flag == "no" & mydata$Recency == "0-12 Mths"] <- with(mydata[mydata$Flag == "no" & mydata$Recency == "0-12 Mths", ],
ifelse(Spend Band == "High", "G07",
ifelse(Spend Band == "Medium", "G08", "G09")))
mydata$Segment[mydata$Flag == "no" & mydata$Recency == "12-24 Mths"] <- with(mydata[mydata$Flag == "no" & mydata$Recency == "12-24 Mths", ],
ifelse(Spend Band == "High", "G10",
ifelse(Spend Band == "Medium", "G11", "G12")))
您必须更改变量名称,因为Spend Band
在R中不是可行的变量名称,因此我猜您的名称将被称为Spend_Band
或类似名称。
答案 2 :(得分:0)
扩展我上面的评论(抱歉,我很着急),我建议您在csv中使用您的规则(或者只是定义为数据框,但如果他们要更改csv可能是最简单的)并将它们作为单独的data.frame读取,例如下面。这将使flag,period和spend_group的每个组合与您要分配给每个组合的Segment一起使用。
假设你的数据(包括#34; Unique.ID&#34;,&#34; flag&#34;,&#34; period&#34;,&#34; spend_group&#34;)在df中
library(dplyr)
df_withSegment <- left_join(df, rules)
作为&#34;标志&#34;,&#34;期间&#34;,&#34; spend_group&#34;是具有通用名称的所有列,它将为规则中的Segment值分配这三列的每个组合。
规则,例如dataframe(来自csv或R)