【问题标题】:How to count repetitions in a dataframe column in R using dplyr?如何使用 dplyr 计算 R 中数据框列中的重复次数?
【发布时间】:2020-03-07 19:53:57
【问题描述】:

我有一个 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 是机场名称出现在 Origin 列中的次数加上出现在 Destiny 列中的次数之和。起飞是机场名称出现在 Origin 列中的次数,最后,着陆是机场名称出现在 Destiny 列中的总次数。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    我们可以使用data.table

    library(data.table)
    melt(setDT(df1), measure = 1:2)[, .(.N,  sum(variable == 'Origin'), 
              sum(variable == 'Destination')), value]
    

    【讨论】:

      【解决方案2】:

      你可以试试:

      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')
        )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-08
        • 1970-01-01
        • 2022-07-29
        • 2015-09-01
        • 2022-01-14
        • 1970-01-01
        • 2019-06-04
        • 1970-01-01
        相关资源
        最近更新 更多