2017-01-05 2 views
-1

Я хотел бы подмножить свой tbl на основе минимального значения переменной.группа мудрый min или max с dplyr?

Я нашел SO сообщение уже here используя данные.table. Есть ли способ использовать dplyr?

> glimpse(x) 
Observations: 3,074,921 
Variables: 9 
$ sessionId <chr> "1468614023881.kvz0h9ofxbt9", "1469063434066.e9h65wdygb9", "1469240810386.2k47r07tx1or", "146933076... 
$ dateHour <chr> "2016080106", "2016080118", "2016080119", "2016080120", "2016080108", "2016080106", "2016080117", "... 
$ minute  <ord> 25, 10, 30, 38, 32, 12, 42, 32, 42, 39, 32, 20, 0, 4, 39, 46, 54, 32, 46, 46, 33, 53, 51, 2, 22, 36... 
$ userType <chr> "New Visitor", "New Visitor", "New Visitor", "New Visitor", "New Visitor", "New Visitor", "Returnin... 
$ region  <chr> "Virginia", "Washington", "Chihuahua", "Missouri", "Nevada", "Minnesota", "Oklahoma", "(not set)", ... 
$ metro  <chr> "Roanoke-Lynchburg VA", "Seattle-Tacoma WA", "(not set)", "Joplin MO-Pittsburg KS", "Reno NV", "Min... 
$ city  <chr> "Roanoke", "Camano Island", "Ciudad Juarez", "Joplin", "Reno", "Owatonna", "Edmond", "Port-au-Princ... 
$ sessions <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ... 
$ dhm   <chr> "201608010625", "201608011810", "201608011930", "201608012038", "201608010832", "201608010612", "20... 

dhm variable - это конкатенация датыНачало и минуты столбцов. У моих данных есть несколько повторяющихся идентификаторов сеанса, и я хотел бы получить строки, где, в случае дубликата, я получаю самую раннюю запись для sessionId на основе min (dhm).

ответ

2

Групповые данные за сеанс и аранжировка по dhm. Затем отфильтровать только первые строки (за сеанс)

dat %>% group_by(sessions) %>% arrange(dhm) %>% filter(row_number() == 1) 

или как указано в комментариях

dat %>% group_by(sessions) %>% filter(which.min(dhm)==row_number()) 
+1

Я уверен, что это более эффективно использовать 'which.min' и подмножество тем, а не «упорядочить» всю группу (O (* n *) vs O (* n * log * n *). –

+1

И если вы собираетесь организовать, возможно, лучше сначала организовать весь набор данных, а перестраивать каждую группу за каждую сессию –

+0

Прохладный, спасибо за совет! – Wietze314