从 R 中的数值中查找工作日平均值

Finding the Weekday Average from numerical values in R

所以我有这样的价值观 周一 162 周二 123 周三 29 等等。我需要在 R 中找到所有工作日的平均值。我尝试了过滤器和 group_by 但无法得到答案。

     Time Day Count Speed
1   00:00 Sun   169  60.2
2   00:00 Mon    71  58.5
3   00:00 Tue    70  57.2
4   00:00 Wed    68  58.5
5   00:00 Thu    91  58.8
6   00:00 Fri    94  58.7
7   00:00 Sat   135  58.5
8   01:00 Sun   111  60.0
9   01:00 Mon    45  59.2
10  01:00 Tue    50  57.6

我需要输出成为工作日平均值 = ####

这可能会奏效

days <- c("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")
d.f <- data.frame(Day = rep(days, 3), Speed = rnorm(21))

# split dataframe by days then take the mean over the speed
lapply(split(d.f, f=days), function(d) mean(d$Speed))

假设你的 df 是

> df
# A tibble: 14 x 2
   Day   Count
   <chr> <dbl>
 1 Sun      31
 2 Mon      51
 3 Tue      21
 4 Wed      61
 5 Thu      31
 6 Fri      51
 7 Sat      65
 8 Sun      31
 9 Mon      13
10 Tue      61
11 Wed      72
12 Thu      46
13 Fri      62
14 Sat      13

您可以使用

df %>% 
  filter(!Day %in% c('Sun', 'Sat')) %>%
  group_by(Day) %>%
  summarize(mean(Count))

得到

# A tibble: 5 x 2
  Day   `mean(Count)`
  <chr>         <dbl>
1 Fri            56.5
2 Mon            32  
3 Thu            38.5
4 Tue            41  
5 Wed            66.5

对于所有过滤值的平均值

df %>% 
  filter(!Day %in% c("Sun", "Sat")) %>%
  summarize("Average of all Weekday counts" = mean(Count))

输出

# A tibble: 1 x 1
  `Average of all Weekday counts`
                            <dbl>
1                            46.9

获取数值而不是小标题

df %>% 
  filter(!Day %in% c("Sun", "Sat")) %>%
  summarize("Average of all Weekday counts" = mean(Count)) %>%
  as.numeric()

输出

[1] 46.9

如果您正在寻找工作日的单一均值,您可以这样做:

dat = data.frame(Time = rep(c("00:00","01:00"),c(7,3)),
                 Day = c("Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun","Mon","Tue"),
                 Count = c(169,71,70,68,91,94,135,111,45,50),
                 Speed = c(60.2,58.5,57.2,58.5,58.8,58.7,58.5,60.0,59.2,57.6))

mean(dat$Count[dat$Day %in% c("Mon","Tue","Wed","Thu","Fri")])
# [1] 69.85714

另一方面,如果您正在寻找每一天的平均值,那么您可以使用基数 R:

aggregate(dat$Count, by=list(dat$Day), FUN = mean)
#   Group.1   x
# 1     Fri  94
# 2     Mon  58
# 3     Sat 135
# 4     Sun 140
# 5     Thu  91
# 6     Tue  60
# 7     Wed  68

您似乎已经尝试过 dplyr,因此 dplyr 中相同操作的语法为:

library(dplyr)

dat %>% group_by(Day) %>% summarize(mean_count = mean(Count))
#  Day   mean_count
#  <chr>      <dbl>
# 1 Fri           94
# 2 Mon           58
# 3 Sat          135
# 4 Sun          140
# 5 Thu           91
# 6 Tue           60
# 7 Wed           68

如果您想在 data.table 中做同样的事情,您可以这样做:

library(data.table)

as.data.table(dat)[,.(mean_count = mean(Count)), by = Day]
#    Day mean_count
# 1: Sun        140
# 2: Mon         58
# 3: Tue         60
# 4: Wed         68
# 5: Thu         91
# 6: Fri         94
# 7: Sat        135