2016-08-18 22 views
0

のシーケンスを作成する方法1は、最終的なように見えるような、特定の機会のIDに関連付けられている各シーケンスを追加するに行くか、以下のデータが与えられた文字列

dat = structure(list(OpportunityId = c("006a000000zLXtZAAW", "006a000000zLXtZAAW", 
           "006a000000gst", "006a000000gstg", "006a000000gstg", 
           "006a000000zLXtZAAW"), IsWon = c(1, 1, 1, 1, 1, 1), 
        sequence = c("LLLML", "LHHHL", "LLLML", "HMLLL", "LLLLL", "LLLLL")), 
       .Names = c("OpportunityId","IsWon", "sequence"), row.names = c(NA, 6L), class = "data.frame") 

dat 

に似て設定します。

oppid sequence 
006... LLL, LML, MMM 
007... MMM, MML, MMH, LLL, HHH 
007... LML, MMM 

+2

シーケンスを作成するためのルールやロジックはありませんか? mは入力 'dat'です。 – akrun

+1

これは100%salesforceデータですか? lolol – emehex

+0

私はここで同様の質問に答えました:http://stackoverflow.com/q/38125125/1514952 - あなたは、集計関数として直接 'paste 'を使って' aggregate'を使って、以下の答えにステップを保存することができます(申し訳ありません、私はどのように/私は重複または何かとしてマークする必要があります知っている十分な知らない) – aPaulT

答えて

2

私たちは、たぶんaggregateuniqueの組み合わせは助けることができる 'OpportunityId'

library(data.table) 
setDT(dat)[, .(sequence = toString(unique(sequence))) , 
       by = .(oppid = OpportunityId)] 
2

によってグループ化した後、 'シーケンス' をpasteすることができます。

aggregate(sequence ~ OpportunityId, dat, unique) 
#  OpportunityId   sequence 
#1  006a000000gst    LLLML 
#2  006a000000gstg  HMLLL, LLLLL 
#3 006a000000zLXtZAAW LLLML, LHHHL, LLLLL 

@akrunがコメントに指摘しているように、この場合、シーケンス列はリストとして格納されます。

dat$sequence <- sapply(dat$sequence, paste, collapse=", ") 
1

library(dplyr) 
dat_new <- dat %>% 
    group_by(OpportunityId) %>% 
    summarise(sequence = toString(sequence)) %>% 
    distinct(.keep_all = TRUE) 

出力

dplyr付:

必要に応じて、sequence列のリストを用いて文字形式(行ごとに単一の文字列)に変換することができます。

#  OpportunityId IsWon   sequence 
# 1 006a000000zLXtZAAW  1 LLLML, LHHHL, LLLLL 
# 2  006a000000gst  1    LLLML 
# 3  006a000000gstg  1  HMLLL, LLLLL 
関連する問題