按组展开数据框
Expand a data frame by group
我有一个由 1000 个数据帧 (500x500) 组成的大数据帧,我是通过以下代码创建的:
setwd("user/all_csv")
archivos <- list.files(full.names = F)
big.df <- lapply(archivos, read.csv, header = TRUE) %>%
set_names(archivos)%>%
bind_rows(.id = 'grp')
big.df
如下所示(一个小示例):
grp X X1 X2 X5
2020_01_19 1 23 47 3
2020_01_19 2 13 45 54
2020_01_19 5 23 41 21
2020_01_20 1 65 32 19
2020_01_20 2 39 52 12
2020_01_20 5 43 76 90
...
如何生成以下输出?:
1-X1 1-X2 1-X5 2-X1 2-X2 2-X5 5-X1 5-X2 5-X5
2020_01_19 23 47 3 13 45 54 23 41 21
2020_01_20 65 32 19 39 52 12 43 76 90
...
我真的不知道如何进行。任何帮助将不胜感激。
使用 tidyr::pivot_wider
和 names_glue
参数如下。
- 存储所有变量的名称(甚至 500 个)要旋转成向量说
cols
- 使用
values_from = all_of(cols)
作为 pivot_wider
中的参数
cols <- c('X1', 'X2', 'X5')
df %>% pivot_wider(id_cols = grp, names_from = X, values_from = all_of(cols),
names_glue = '{X}-{.value}')
# A tibble: 2 x 10
grp `1-X1` `2-X1` `5-X1` `1-X2` `2-X2` `5-X2` `1-X5` `2-X5` `5-X5`
<chr> <int> <int> <int> <int> <int> <int> <int> <int> <int>
1 2020_01_19 23 13 23 47 45 41 3 54 21
2 2020_01_20 65 39 43 32 52 76 19 12 90
如果要使用除前两列之外的所有列,请使用此
df %>% pivot_wider(id_cols = grp, names_from = X, values_from = !c(grp, X),
names_glue = '{X}-{.value}')
# A tibble: 2 x 10
grp `1-X1` `2-X1` `5-X1` `1-X2` `2-X2` `5-X2` `1-X5` `2-X5` `5-X5`
<chr> <int> <int> <int> <int> <int> <int> <int> <int> <int>
1 2020_01_19 23 13 23 47 45 41 3 54 21
2 2020_01_20 65 39 43 32 52 76 19 12 90
但是,如果您想按照预期结果重新排列列,您可以在 tidyr 1.2.0 的 pivot_wider
函数中使用 names_vary = 'slowest'
。
我有一个由 1000 个数据帧 (500x500) 组成的大数据帧,我是通过以下代码创建的:
setwd("user/all_csv")
archivos <- list.files(full.names = F)
big.df <- lapply(archivos, read.csv, header = TRUE) %>%
set_names(archivos)%>%
bind_rows(.id = 'grp')
big.df
如下所示(一个小示例):
grp X X1 X2 X5
2020_01_19 1 23 47 3
2020_01_19 2 13 45 54
2020_01_19 5 23 41 21
2020_01_20 1 65 32 19
2020_01_20 2 39 52 12
2020_01_20 5 43 76 90
...
如何生成以下输出?:
1-X1 1-X2 1-X5 2-X1 2-X2 2-X5 5-X1 5-X2 5-X5
2020_01_19 23 47 3 13 45 54 23 41 21
2020_01_20 65 32 19 39 52 12 43 76 90
...
我真的不知道如何进行。任何帮助将不胜感激。
使用 tidyr::pivot_wider
和 names_glue
参数如下。
- 存储所有变量的名称(甚至 500 个)要旋转成向量说
cols
- 使用
values_from = all_of(cols)
作为pivot_wider
中的参数
cols <- c('X1', 'X2', 'X5')
df %>% pivot_wider(id_cols = grp, names_from = X, values_from = all_of(cols),
names_glue = '{X}-{.value}')
# A tibble: 2 x 10
grp `1-X1` `2-X1` `5-X1` `1-X2` `2-X2` `5-X2` `1-X5` `2-X5` `5-X5`
<chr> <int> <int> <int> <int> <int> <int> <int> <int> <int>
1 2020_01_19 23 13 23 47 45 41 3 54 21
2 2020_01_20 65 39 43 32 52 76 19 12 90
如果要使用除前两列之外的所有列,请使用此
df %>% pivot_wider(id_cols = grp, names_from = X, values_from = !c(grp, X),
names_glue = '{X}-{.value}')
# A tibble: 2 x 10
grp `1-X1` `2-X1` `5-X1` `1-X2` `2-X2` `5-X2` `1-X5` `2-X5` `5-X5`
<chr> <int> <int> <int> <int> <int> <int> <int> <int> <int>
1 2020_01_19 23 13 23 47 45 41 3 54 21
2 2020_01_20 65 39 43 32 52 76 19 12 90
但是,如果您想按照预期结果重新排列列,您可以在 tidyr 1.2.0 的 pivot_wider
函数中使用 names_vary = 'slowest'
。