2017-01-29 2 views
1

Подводя итог проблеме манипулирования данными, с которой я борюсь, в заголовок был жестким, но краткий пример очень хорошо это обобщает. У меня есть таблица данных связанных с авиакомпанией данных, с колонками для аэропортов происхождения и назначения. Мои данные выглядит следующим образом:R - dplyr, сгруппируйте, объедините 2 строки с колонками vals правильно, но смешайте

my_data = collect(filter(flightdata, TailNum == t_n) %>% 
       select(airport1=Origin,airport2=Dest,ActualElapsedTime) %>% 
       group_by(airport1,airport2) %>% 
       summarize(ActualElapsedTime = mean(ActualElapsedTime))) 

my_data 
    airport1 airport2  ActualElapsedTime 
     <chr> <chr>    <dbl> 
1  HNL  ITO   51.67416 
2  HNL  KOA   44.00937 
3  HNL  LIH   37.98526 
4  HNL  OGG   37.52542 
5  ITO  HNL   50.02260 
6  ITO  OGG   39.22222 
7  KOA  HNL   43.52518 
8  KOA  OGG   34.20370 
9  LIH  HNL   33.47679 
10  LIH  OGG   47.06522 
11  OGG  HNL   35.28550 
12  OGG  ITO   37.57143 
13  OGG  KOA   31.61364 
14  OGG  LIH   45.46667 

Эта таблица была результатом group_by и обобщать я сделал, также, как показано выше. Однако, когда я делаю свою группу и суммирую, я хочу, чтобы она группировалась (HNL ITO) и (ITO HNL) вместе, в отличие от отдельных (строка 1 имеет (HNL, ITO), строка 5 имеет (ITO, HNL)), , Причина, по которой эти сгруппированные строки являются отдельными в моем выпуске, заключается в том, что row1 соответствует полетам из аэропорта HNL в аэропорт ITO, а row5 соответствует полетам от ITO до HNL. Моя результирующая структура данных будет сгруппирована в 7 групп, а затем не будет. 14.

Любые мысли об этом были бы весьма полезными. Я просто изучаю dplyr и%>% для трубопроводов, и они великолепны, и я тоже хотел бы получить это.

EDIT - я попытался изменить свою выберите строку

select(airport1=pmin(Origin,Dest),airport2=pmax(Origin,Dest),ActualElapsedTime) 

, но он не работает ...

+0

Это похоже на аналогичный вопрос: http://stackoverflow.com/questions/28992028/grouping-over-all-possible-combinations-of-several-variables-with-dplyr –

+0

рассмотрит спасибо – Canovice

+0

Я не группирую все комбинации трех переменных, как в этом сообщении. Я пытаюсь сказать dplyr «обрабатывать HNL ITO так же, как ITO HNL, даже если они находятся в разных столбцах». Я думаю, что лучший способ сделать это - правильно настроить аэропорт1 и аэропорт2, например, как я попытался в своем заявлении на выбор – Canovice

ответ

2

Один из способов сделать это создает новую переменную, содержащий каждое спаривание airport1 и airport2, затем суммируя данные, используя его в качестве переменной группировки.

В этом случае, мы создаем переменную комбинацию путем вставки в алфавитном порядке имена airport1 и airport2, поэтому у нас есть уникальное значение для каждой пары.

my_data <- collect(
    flightdata %>% 
    filter(TailNum == t_n) %>% 
    select(airport1 = Origin, airport2 = Dest, ActualElapsedTime) %>% 
    mutate(combination = ifelse(airport1 < airport2, 
           paste(airport1, airport2), 
           paste(airport2, airport1)) 
    ) %>% 
    group_by(combination) %>% 
    summarize(ActualElapsedTime = mean(ActualElapsedTime)) 
)