2016-11-17 6 views
1

У меня есть образец dataframe:Datewise группировка данных в R

date   item1 item2 item3 
17-11-2016  2A  hp  cnf 
12-11-2016  1A  bp  wl 
13-11-2016  3A  sp  dl 
14-11-2016  1A  hp  cnf 
16-11-2016  2A  bp  cnf 
10-11-2016  1A  sp  wl 
17-11-2016  2A  hp  wl 

Я хочу группировать данные на основе всех столбцов датировать, ITEM1 и ст.2, так что конкретный столбец с одинаковым значением будет прийти к той же группе.

Ожидаемый результат:

date   item1 item2 item3 grp 
17-11-2016  2A  hp  cnf  1 
17-11-2016  2A  hp  wl  1 
12-11-2016  1A  bp  wl  2 
13-11-2016  3A  sp  dl  3 
14-11-2016  1A  hp  cnf  4 
16-11-2016  2A  bp  cnf  5 
10-11-2016  1A  sp  wl  6 
+0

Что вы ожидаемый выход – akrun

+0

Вы только со ссылкой на сортировку данных? – akaDrHouse

+0

@akaDrHouse, это не сортировка prob, но вы хотите группировать на основе одинаковых значений col. – azad

ответ

1

Вы можете сделать это следующим образом:

DF <- data.frame(date = c("17-11-2016","12-11-2016","13-11-2016","14-11-2016", 
          "16-11-2016","10-11-2016","17-11-2016"), 
       item1 = c("2A","1A","3A","1A","2A","1A","2A"), 
       item2 = c("hp","bp","sp","hp","bp","sp","hp"), 
       item3 = c("cnf","wl","dl","cnf","cnf","wl","wl") 
       ) 
DF$grp <- as.numeric(factor(paste(DF$date,DF$item1,DF$item2))) 
DF[order(DF$grp),] 
     date item1 item2 item3 grp 
6 10-11-2016 1A sp wl 1 
2 12-11-2016 1A bp wl 2 
3 13-11-2016 3A sp dl 3 
4 14-11-2016 1A hp cnf 4 
5 16-11-2016 2A bp cnf 5 
7 17-11-2016 2A hp wl 6 
1 17-11-2016 2A hp cnf 6 
0

Мы можем paste первые три столбца, конвертировать в factor, указав levels как в unique элементов в 'v1' и принуждать его к integer

v1 <- do.call(paste, df1[1:3]) 
df1$grp <- as.integer(factor(v1, levels = unique(v1))) 
df1$grp 
#[1] 1 1 2 3 4 5 6 

Или использовать match

match(v1, unique(v1)) 
#[1] 1 1 2 3 4 5 6 
Смежные вопросы