首页 > 解决方案 > 如何对 R 中两个不同表的属性进行算术运算?

问题描述

如果这是一个简单而多余的问题,我深表歉意,但经过几个小时的谷歌搜索,我似乎找不到任何与我正在寻找的东西相匹配的东西。我对 R 很陌生。

我的目标是找出达美航空公司航班迟到的百分比,具体取决于航班从哪个机场起飞。到目前为止,这是我的代码:

#install.packages("nycflights13")
#library(nycflights13)
flts <- nycflights13::flights

# filtering by Delta Airlines and late arrival dates
all_delta_flights <- filter(flts, carrier == "DL")
all_late_delta_flights <- filter(flts, carrier == "DL", arr_delay > 0)

# group by departing airport
by_origin <- all_delta_flights %>% group_by(origin)
by_origin_late <- all_late_delta_flights %>% group_by(origin) 

# get number of flights by departure airport
by_origin_late %>% summarise(n = n())
by_origin %>% summarise(n = n())

最后两行代码输出以下两个表。

# A tibble: 3 x 2
  <chr>  <int>
1 EWR     1725
2 JFK     6353
3 LGA     8335

# A tibble: 3 x 2
  origin     n
  <chr>  <int>
1 EWR     4342
2 JFK    20701
3 LGA    23067

我现在要做的是创建一个结合 n 列的新表,例如

# A tibble: 3 x 2
  origin     n
  <chr>  <double>
1 EWR     .397     #  == 1725 / 4342
2 JFK     ???      #  == 6353 / 20701
3 LGA     ???

有没有一种简单的方法可以在 R 中做到这一点?

谢谢!

标签: rdplyr

解决方案


您可以在单个管道中执行此操作而无需加入:

flts %>% 
    filter(carrier == "DL") %>% 
    group_by(origin) %>% 
    summarize(percent = sum(arr_delay > 0) / n())

似乎该列包含 NA 值,arr_delay您可能需要添加:na.rm=Tsum

flts %>% 
    filter(carrier == "DL") %>% 
    group_by(origin) %>% 
    summarize(percent = sum(arr_delay > 0, na.rm=T) / n())

# A tibble: 3 x 2
#  origin percent
#  <chr>    <dbl>
#1 EWR      0.397
#2 JFK      0.307
#3 LGA      0.361

推荐阅读