计算 R 中每周的中位数

苏扎

我想计算我的PV变量每个工作日的中位数也就是说,看变量PV,可以看出,例如它有三个星期五,即中位数的计算会考虑这三个星期五的数据。

谢谢!

library(dplyr) 

df <- structure(
  list(Id=c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1),
       date1 = c("2021-07-01","2021-07-01","2021-07-01","2021-07-01","2021-04-02",
                 "2021-04-02","2021-04-02","2021-04-02","2021-04-02","2021-04-02","2021-04-03",
                 "2021-04-03","2021-04-03","2021-04-03","2021-04-03","2021-04-08","2021-04-08",
                 "2021-04-07","2021-04-09","2021-04-10","2021-04-10"),
       Week= c("Thursday","Thursday","Thursday","Thursday","Friday","Friday","Friday","Friday",
               "Friday","Friday","Saturday","Saturday","Saturday","Saturday","Saturday","Thursday",
               "Thursday","Friday","Friday","Saturday","Saturday"),
       DTPE = c("Ho","Ho","Ho","Ho","","","","","","","","","","","","","","","","Ho","Ho"),
       D1 = c(8,1,9, 3,5,4,7,6,3,8,2,3,4,6,7,8,8,6,16,2,3), DR01 = c(4,1,4,3,3,4,3,6,3,7,2,3,4,6,7,8,9,2,6,7,3),
       DR02 = c(4,1,4,3,3,4,1,6,3,7,6,6,4,6,7,8,4,2,6,2,3), DR03 = c(7,5,4,3,6,4,1,5,3,6,2,3,4,9,7,8,4,2,6,4,3),
       DR04= c(9,5,6,7,3,2,7,4,2,1,5,3,4,6,7,8,4,7,7,4,3),DR05 = c(9,5,4,3,3,7,1,5,3,7,2,3,4,7,7,8,4,2,6,4,3)),
  class = "data.frame", row.names = c(NA, -21L))

df<-df %>%
  group_by(Id, date1, Week) %>%
  select(D1:DR05) %>%
  summarise_all(sum)

x<-subset(df, select = DR01:DR05)
x<-cbind(df, setNames(df$D1 - x, paste0(names(x), "_PV")))
PV<-select(x, date1, Week,ends_with("PV"))
PV
  Id date1      Week     DR01_PV DR02_PV DR03_PV DR04_PV DR05_PV
  <dbl> <chr>      <chr>      <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
1     1 2021-04-02 Friday         7       9       8      14       7
2     1 2021-04-03 Saturday       0      -7      -3      -3      -1
3     1 2021-04-07 Friday         4       4       4      -1       4
4     1 2021-04-08 Thursday      -1       4       4       4       4
5     1 2021-04-09 Friday        10      10      10       9      10
6     1 2021-04-10 Saturday      -5       0      -2      -2      -2
7     1 2021-07-01 Thursday       9       9       2      -6       0
r2evans
x %>%
  group_by(Week) %>%
  summarize(across(ends_with("_PV"), median))
# # A tibble: 3 x 6
#   Week     DR01_PV DR02_PV DR03_PV DR04_PV DR05_PV
#   <chr>      <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
# 1 Friday       7       9       8       9       7  
# 2 Saturday    -2.5    -3.5    -2.5    -2.5    -1.5
# 3 Thursday     4       6.5     3      -1       2  

如果要合并所有列,一种方法是

PV %>%
  ungroup() %>%
  select(Week, ends_with("PV")) %>%
  tidyr::pivot_longer(-Week) %>%
  group_by(Week) %>%
  summarize(Med = median(value))
# # A tibble: 3 x 2
#   Week       Med
#   <chr>    <dbl>
# 1 Friday       8
# 2 Saturday    -2
# 3 Thursday     4

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章