将行值汇总到 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
我得到的:
一个数据集,指示 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