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 创建
我有一个包含 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 创建