2016-08-18 3 views
0

Предоставлено набора данных аналогичны следующиеСоздать последовательность строк

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% данные по продажам, не так ли? lolol – emehex

+0

Я ответил на аналогичный вопрос здесь: http://stackoverflow.com/q/38125125/1514952 - вы можете сохранить шаг в ответах ниже, используя 'aggregate' с' paste' непосредственно как агрегирующая функция (извините, я не знаю достаточно, чтобы знать, как/если я должен быть отмечен как дубликат или что-то еще) – aPaulT

ответ

2

Мы можем paste в 'последовательность' после того, как группировка по '' OpportunityId

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

Возможно сочетание aggregate и unique может помочь.

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

Как указано @akrun в комментарии, столбец последовательностей хранится как список в этом случае.

В случае необходимости, список в sequence столбце могут быть преобразованы в формат символов (одну строку для каждой строки) с помощью:

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

С dplyr

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

Выход

#  OpportunityId IsWon   sequence 
# 1 006a000000zLXtZAAW  1 LLLML, LHHHL, LLLLL 
# 2  006a000000gst  1    LLLML 
# 3  006a000000gstg  1  HMLLL, LLLLL