如何部分旋转数据框?
How to partially pivot a dataframe?
我有一个 table 看起来像这样:
library(tibble)
df <-
tribble(~group, ~median, ~stat_name, ~value,
"A", 2, "mean", 2,
"A", 2, "sd", 1,
"A", 2, "max", 4,
"B", 2.5, "mean", 1.5,
"B", 2.5, "sd", 0.7,
"B", 2.5, "max", 6,
"C", 1.7, "mean", 2.2,
"C", 1.7, "sd", 0.5,
"C", 1.7, "max", 3)
df
#> # A tibble: 9 x 4
#> group median stat_name value
#> <chr> <dbl> <chr> <dbl>
#> 1 A 2 mean 2
#> 2 A 2 sd 1
#> 3 A 2 max 4
#> 4 B 2.5 mean 1.5
#> 5 B 2.5 sd 0.7
#> 6 B 2.5 max 6
#> 7 C 1.7 mean 2.2
#> 8 C 1.7 sd 0.5
#> 9 C 1.7 max 3
由 reprex package (v2.0.0)
于 2021-07-27 创建
我希望将每个组的 median
移动到 stat_name
和 value
之下,因此所需的输出是:
## # A tibble: 12 x 3
## group stat_name value
## <chr> <chr> <dbl>
## 1 A median 2
## 2 A mean 2
## 3 A sd 1
## 4 A max 4
## 5 B median 2.5
## 6 B mean 1.5
## 7 B sd 0.7
## 8 B max 6
## 9 C median 1.7
## 10 C mean 2.2
## 11 C sd 0.5
## 12 C max 0.3
什么是最直接的方法?
(很抱歉,我什至不知道如何命名我所询问的程序)
首先将 stat_name
中的统计数据重塑为宽格式,然后将所有统计数据重塑为长格式。
library(tidyr)
df %>%
pivot_wider(
id_cols = c(group, median),
names_from = stat_name,
values_from = value
) %>%
pivot_longer(-group, names_to = "stat_name")
您可以 summarise
数据集并将其绑定到原始数据集 -
library(dplyr)
df %>%
group_by(group) %>%
summarise(value = mean(median),
stat_name = 'median') %>%
bind_rows(df %>% select(-median)) %>%
arrange(group)
# group value stat_name
# <chr> <dbl> <chr>
# 1 A 2 median
# 2 A 2 mean
# 3 A 1 sd
# 4 A 4 max
# 5 B 2.5 median
# 6 B 1.5 mean
# 7 B 0.7 sd
# 8 B 6 max
# 9 C 1.7 median
#10 C 2.2 mean
#11 C 0.5 sd
#12 C 3 max
我有一个 table 看起来像这样:
library(tibble)
df <-
tribble(~group, ~median, ~stat_name, ~value,
"A", 2, "mean", 2,
"A", 2, "sd", 1,
"A", 2, "max", 4,
"B", 2.5, "mean", 1.5,
"B", 2.5, "sd", 0.7,
"B", 2.5, "max", 6,
"C", 1.7, "mean", 2.2,
"C", 1.7, "sd", 0.5,
"C", 1.7, "max", 3)
df
#> # A tibble: 9 x 4
#> group median stat_name value
#> <chr> <dbl> <chr> <dbl>
#> 1 A 2 mean 2
#> 2 A 2 sd 1
#> 3 A 2 max 4
#> 4 B 2.5 mean 1.5
#> 5 B 2.5 sd 0.7
#> 6 B 2.5 max 6
#> 7 C 1.7 mean 2.2
#> 8 C 1.7 sd 0.5
#> 9 C 1.7 max 3
由 reprex package (v2.0.0)
于 2021-07-27 创建我希望将每个组的 median
移动到 stat_name
和 value
之下,因此所需的输出是:
## # A tibble: 12 x 3
## group stat_name value
## <chr> <chr> <dbl>
## 1 A median 2
## 2 A mean 2
## 3 A sd 1
## 4 A max 4
## 5 B median 2.5
## 6 B mean 1.5
## 7 B sd 0.7
## 8 B max 6
## 9 C median 1.7
## 10 C mean 2.2
## 11 C sd 0.5
## 12 C max 0.3
什么是最直接的方法? (很抱歉,我什至不知道如何命名我所询问的程序)
首先将 stat_name
中的统计数据重塑为宽格式,然后将所有统计数据重塑为长格式。
library(tidyr)
df %>%
pivot_wider(
id_cols = c(group, median),
names_from = stat_name,
values_from = value
) %>%
pivot_longer(-group, names_to = "stat_name")
您可以 summarise
数据集并将其绑定到原始数据集 -
library(dplyr)
df %>%
group_by(group) %>%
summarise(value = mean(median),
stat_name = 'median') %>%
bind_rows(df %>% select(-median)) %>%
arrange(group)
# group value stat_name
# <chr> <dbl> <chr>
# 1 A 2 median
# 2 A 2 mean
# 3 A 1 sd
# 4 A 4 max
# 5 B 2.5 median
# 6 B 1.5 mean
# 7 B 0.7 sd
# 8 B 6 max
# 9 C 1.7 median
#10 C 2.2 mean
#11 C 0.5 sd
#12 C 3 max