R聚集功能:2级分组数据

时间:2018-05-28 11:25:33

标签: r tidyr

我需要gather一个数据帧,但是这些列还有其他组合。例如:

Data I have

我知道当我只有列时如何使用gather。 但我也希望有这样的团体:

The way I want it

通过这种方式,我可以按照我的要求对这些数据进行分组。 我怎么能这样做?

        group1  group1  group2  group2  group2
Week    Region  1   2   3   4   5
201601  somehing    0   0   0   0   0
201602  somehing    0   0   0   0   0
201603  somehing    0   0   0   0   0
201604  somehing    0   0   79.03055276 0   20675
201605  somehing    0   0   68.2845204  0   955157
201606  somehing    0   0   46.12847797 0   943991
201607  somehing    0   0   0   0   935029
201608  somehing    0   0   0   0   899158
201609  somehing    0   0   0   0   127633
201610  somehing    0   0   0   0   0
201611  somehing    0   0   0   0   0
201612  somehing    0   0   0   0   0
201613  somehing    0   0   0   0   0
201614  somehing    0   94.71177518 0   0   0

1 个答案:

答案 0 :(得分:0)

你可以尝试

library(tidyverse)
df %>% 
  gather(k, v, -Week, -Region) %>% 
  mutate(groups=case_when(k %in% paste0("X",1:2) ~ "group1",
                          k %in% paste0("X",3:5) ~ "group2")) %>%    
head
    Week   Region  k v groups
1 201601 somehing X1 0 group1
2 201602 somehing X1 0 group1
3 201603 somehing X1 0 group1
4 201604 somehing X1 0 group1
5 201605 somehing X1 0 group1
6 201606 somehing X1 0 group1

数据。在没有第一行的情况下读入。这些组将使用case_when

添加
df <- read.table(text="V1 V2 group1 group1  group2  group2  group2
    Week    Region  1   2   3   4   5
    201601  somehing    0   0   0   0   0
    201602  somehing    0   0   0   0   0
    201603  somehing    0   0   0   0   0
    201604  somehing    0   0   79.03055276 0   20675
    201605  somehing    0   0   68.2845204  0   955157
    201606  somehing    0   0   46.12847797 0   943991
    201607  somehing    0   0   0   0   935029
    201608  somehing    0   0   0   0   899158
    201609  somehing    0   0   0   0   127633
    201610  somehing    0   0   0   0   0
    201611  somehing    0   0   0   0   0
    201612  somehing    0   0   0   0   0
    201613  somehing    0   0   0   0   0
    201614  somehing    0   94.71177518 0   0   0", header=T,  skip=1)