Как посчитать повторения в столбце dataframe в R, используя dplyr? - PullRequest
0 голосов
/ 07 марта 2020

Я сократил значение df и сохранил только два столбца, которые являются названиями аэропортов (происхождение и место назначения):

Origin Destination
<chr>  <chr>      
1 LPPD   LEMD       
2 DAAE   LFML       
3 EDDH   UUEE       
4 LFLL   DAAS       
5 LFPO   LFSL       
6 UMKK   ULLI       
7 LFPO   LFBA       
8 LFPG   EDDN       
9 LFLL   LFRN       
10 LFPG   EDDW       
# … with more rows

Названия аэропортов повторяются в каждом столбце. Я хотел бы суммировать повторяющиеся названия аэропортов и вывести следующее:

Airports totalMovements takeoffs landings

Аэропорты - это названия аэропортов (один вид), которые появляются в обеих колонках. Total_Movements - это сумма количества отображений названия аэропорта в столбце «Происхождение» и количества отображений в столбце «Судьба». Взлет - это количество раз, когда название аэропорта указывается в столбце «Происхождение», и, наконец, количество посадок - это общее количество раз, когда название аэропорта указывается в столбце «Судьба».

Ответы [ 2 ]

1 голос
/ 07 марта 2020

Мы можем использовать data.table

library(data.table)
melt(setDT(df1), measure = 1:2)[, .(.N,  sum(variable == 'Origin'), 
          sum(variable == 'Destination')), value]
0 голосов
/ 07 марта 2020

Вы можете попробовать:

library(dplyr)
library(tidyr)

pivot_longer(df, everything()) %>%
  group_by(Airports = value) %>%
  summarise(
    totalMovements = n(),
    takeoffs = sum(name == 'Origin'),
    landings = sum(name == 'Destination')
  )

Вывод (на основе строк, показанных в вашем вопросе):

# A tibble: 17 x 4
   Airports totalMovements takeoffs landings
   <fct>             <int>    <int>    <int>
 1 DAAE                  1        1        0
 2 EDDH                  1        1        0
 3 LFLL                  2        2        0
 4 LFPG                  2        2        0
 5 LFPO                  2        2        0
 6 LPPD                  1        1        0
 7 UMKK                  1        1        0
 8 DAAS                  1        0        1
 9 EDDN                  1        0        1
10 EDDW                  1        0        1
11 LEMD                  1        0        1
12 LFBA                  1        0        1
13 LFML                  1        0        1
14 LFRN                  1        0        1
15 LFSL                  1        0        1
16 ULLI                  1        0        1
17 UUEE                  1        0        1

Если вы хотите использовать только dplyr Вы также можете эмулировать поведение pivot_longer с помощью:

library(dplyr)

bind_rows(
  df %>% transmute(Airports = Origin, name = 'Origin'),
  df %>% transmute(Airports = Destination, name = 'Destination')
) %>%
  group_by(Airports) %>%
  summarise(
    totalMovements = n(),
    takeoffs = sum(name == 'Origin'),
    landings = sum(name == 'Destination')
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...