R 中具有 NA 的列的条件总和

Conditional Sum of a column in R with NAs

我有一个包含 4 列的数据集,如下所示:

City Year Week Average
Guelph 2020 2020-04-12 28.3
Hamilton 2020 2020-04-12 10.7
Waterloo 2020 2020-04-12 50.1
Guelph 2020 2020-04-20 3.5
Hamilton 2020 2020-04-20 42.9

我想对同一周的平均列求和。换句话说,我想创建一个包含三列(年、周、平均值)的新数据集,其中同一周我不会有 3 行不同的行,而只有一行(例如,而不是 20220-04-12 的三次,我会有一个),平均列中的相应单元格将是同一周对应的所有行的总和。类似的东西:

Year Week Average
2020 2020-04-12 89.1
2020 2020-04-20 46.4

其中 89.1 是同一周前三行的总和,46.4 是初始 table 对应同一周的最后两行的总和 (2020-04- 20).

我为此使用的代码如下所示:

data_set <- data_set %>%
    select(`Year`, `Week`, `Average`) %>%
    group_by(Year, Week) %>% 
    summarize(Average = sum(Average))
   

但是有几个星期我得到了 NA,而对于其他一些我得到了我想要的正确总和。数据都是数字的,在初始数据集中,平均列上有一些 NA 值。

提前致谢

您可以通过将 na.rm = TRUE 传递给 sum 来完成此操作。此外,由于您 group_by(Year, Week),在这种情况下使用 select 没有太多好处,因为您正在 summarise 内的 Average 变量上生成汇总统计信息。

df <- structure(list(City = c("Guelph", "Hamilton", "Waterloo", "Guelph", 
"Hamilton"), Year = c(2020L, 2020L, 2020L, 2020L, 2020L), Week = c("2020-04-12", 
"2020-04-12", "2020-04-12", "2020-04-20", "2020-04-20"), Average = c(28.3, 
10.7, 50.1, 3.5, 42.9)), class = "data.frame", row.names = c(NA, 
-5L))

library(dplyr)

df %>% 
  mutate(
    Week = as.Date(Week),
  ) %>% 
  group_by(Year, Week) %>% 
  summarise(
    Average = sum(Average, na.rm = TRUE)
  )

#> # A tibble: 2 x 3
#> # Groups:   Year [1]
#>    Year Week       Average
#>   <int> <date>       <dbl>
#> 1  2020 2020-04-12    89.1
#> 2  2020 2020-04-20    46.4

reprex package (v0.3.0)

于 2021-03-10 创建