根据其他三列

时间:2017-07-13 06:36:38

标签: r excel

在我从R导出并手动在Excel中添加Segment列之后,我有一些看起来像这样的原始数据。

原始数据被拉入excel

Raw Data pulled into 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

......依此类推,直到所有变量都被计算在内

我希望代码在每次处理数据时识别差异,例如,标志不会总是为是或否。有时每行都会为是。

我的完整数据集总结如下图所示。

摘要数据

Summary Data

你将如何开始在R中编码?

3 个答案:

答案 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)

enter image description here