将行值汇总到 R 中的列中

Summarize row values into columns in R

我得到的:
一个数据集,指示 100 天内商店每天售出的商品数量。
因此,商店 1 在第 1 天售出 114 件商品,在第 2 天售出 178 件商品,依此类推,直到第 100 天售出 143 件商品。
此外,该数据集有 1000 家这样的商店的类似数据。但是,对于某些商店(如商店 1000),销售计数仅在第 65 天可用。

| Store | Day |Count|
| -------- | -------------- |-------|
| 1    | 1            |114|
| 1   | 2            |178|
| ..    | ..            |..|
| 1   | 100           |143|
| 2    | 1            |197|
| 2   | 2            |159|
| ..    | ..            |..|
| 2   | 100           |39|
| 1000    | 1            |53|
| 1000   | 2            |132|
| ..    | ..            |..|
| 1000   | 65           |104|

我需要什么:
将 100 天的时间段分成 10 个相等的阶段,即第 1-10 天、第 11-20 天……第 91-100 天。
对于每个商店,找到每个阶段的中位数并在列中报告它们。
对于具有 1 和 2 等完整 100 天数据的商店,将有 10 个中位数。 (m_p1, …m_p10)
而对于其余的,就会更少,比如商店 1000 将只有 7 个中值。
所需的 table(1000 行 - 每个商店 1 行)如下所示:
Store m_p1 m_p2 .. m_p10
1 120 157 .. 123
2 90 140 .. 121
.. .. .. .. ..
1000 45 102 .. NA

您可以创建一组 10 天,计算 median Count 值并获取宽格式数据。

library(dplyr)
library(tidyr)

df %>%
  mutate(group = ceiling(Day/10)) %>%
  group_by(Store, group) %>%
  summarise(Count = median(Count), .groups = 'drop') %>%
  pivot_wider(names_from = group, values_from = Count, names_prefix = 'm_p')
library(tidyverse)

#sample data
set.seed(123)
df <- data.frame(store = rep(c(1,2), each = 100),
                 day = rep(1:100, 2),
                 Count = sample(80:100, 200, T))

str(df)
#> 'data.frame':    200 obs. of  3 variables:
#>  $ store: num  1 1 1 1 1 1 1 1 1 1 ...
#>  $ day  : int  1 2 3 4 5 6 7 8 9 10 ...
#>  $ Count: int  94 98 93 82 89 97 90 84 99 93 ...

df %>%
  group_by(store, phase = (1 + ((day - 1) %/% 10))) %>%
  summarise(val = median(Count), .groups = 'drop') %>%
  pivot_wider(names_from = phase, names_prefix = 'm_p', values_from = val)

#> # A tibble: 2 x 11
#>   store  m_p1  m_p2  m_p3  m_p4  m_p5  m_p6  m_p7  m_p8  m_p9 m_p10
#>   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1     1  93    87.5  91.5  87.5    93  92.5  91.5    90    91  93  
#> 2     2  87.5  91.5  92    90.5    91  90    88.5    90    91  94.5