2017-07-13 5 views
1

RからエクスポートしてSegment列をExcelに手動で追加した後、このような生データがあります。他の3つの列の値に基づいてR列の値を設定します

生データは、私は私のためにセグメントを追加しますRのコードを書きたいエクセル

Raw Data pulled into excel

に引っ張りました。

データ記述...ように

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 

...と変数のすべてが

計上されるまで、私はコードをしたいですデータが処理されるたびに差を認識するようにします。たとえば、フラグは常にYesまたはNoになるとは限りません。すべての行でYesになることがあります。

要約した完全なデータセットは、次の図のようになります。

まとめたデータは、

Summary Data

はどのようにRでこれをコーディングを開始しますか?

+1

まず、あなたがして、 '' 'DF <持つデータフレームとしてRにそれを読んで、CSVとして保存したいと思います - read.csv( "C:/Users/you/path_to_file/file.csv") '' '。その後、私はRのチュートリアルを読むことをお勧めします。これは最初に学ぶことの1つです – rsoren

+0

ありがとう@rsoren。私はすでにRのすべてのデータを持っています、これは処理の最後のステップです。上記のものよりも多くの変数がある可能性があるので、ルールを入力する必要はありません。理想的には、各条件に対してベクトルなどを作成し、それらをルールのバックボーンとして使用したいとします。たとえば、フラグ< - c(「はい」、「いいえ」)、直前の< - c(「0-12 Mths "、" 12-24 Mths "など)チュートリアルをお勧めしますか? –

+1

何か試しましたか?ユーザーの1つのキャンプは 'dplyr'パイプラインを提案し、他のキャンプは' data.table'の例と対抗します。おそらく 'ifelse'や他のベクタベースの操作を使って、Rでかなり簡単に行うこともできます。しかし、最初に、私たちが遊ぶデータを持っていれば何かを作るのがはるかに簡単で、イメージから転記する傾向はありません。 [ヘルプ/ mcve](https://stackoverflow.com/help/mcve)と[人気のあるq/a](https://stackoverflow.com/a/5963610/3358272)で良い質問を作成するための良い提案があります。 。 – r2evans

答えて

0

私は急いでいました。申し訳ありませんが、私はあなたのルールをcsvで(またはちょうどデータフレームとして定義しておくことをお勧めしますが、csvを変更するつもりなら、 )、それらを以下のような別個のdata.frameとして読み込みます。これにより、各組み合わせに割り当てるセグメントに、フラグ、期間、費用の各組み合わせを設定します。 (COLNAMES "Unique.ID"、 "フラグ"、 "期間"、 "spend_group" で)データを仮定

"が、 "フラグ"、 "期間" とDF

library(dplyr) 
df_withSegment <- left_join(df, rules) 

であるspend_group "は共通名のすべての列であり、これらの3つの列の各組み合わせにルール内のセグメントの値を割り当てます。

ルール(CSVまたはRから)例えばデータフレーム

enter image description here

+0

finaldf < - left_join(df、ルール、by = c( "フラグ" = "期間" = "期間"、 "SpendGroup" = "SpendGroup")) ありがとうみんな。 –

0

私は4段階のifelse()でやっています。

あなたは、4つのサブセット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などと似ています。

+1

オプションと結果で別のデータフレームを作成してdplyr :: left_join()を使用してデータを結合し、セグメントを指定する方が簡単かもしれません – user2738526

+0

残念ながら、私はdplyrに精通していません。 – LAP

+0

ご意見ありがとうございます。上記のデータリンクを参照してください。 @abishekによって提供される回答のようなもので遊ぶ必要があると思います。データがロードされるたびに値が変更され、各結果の値を書き込むのではなく、フィールド名を使用することが考慮されます。どのようにそれを行うか分からない! –

1

私の頭の上にマージは正しい方法のようです。

combine = merge(raw_data、summary_data、by.x = c( "フラグ"、 "期間"、 "支出グループ")、by.y = c( "フラグ"、 "最新の"、 "費やし"))

+0

@Super_Siはあなたが助けてくれたら、解答として親切に回答を受け入れる –

+0

上記のデータリンクを参照してください。データが読み込まれるたびに値が変更され、各結果の値を書き込むのではなく、フィールド名を使用することで、これを考慮に入れて、このようなことをする必要があると思います。どのようにそれを行うか分からない! –

関連する問題