Преобразование в широкий формат из длинного с несколькими столбцами идентификатора и значения

Я застрял, пытаясь преобразовать широкий формат в длинный с несколькими столбцами идентификаторов и значений. Я бы предпочел tidyr решение как dcast, поскольку по умолчанию используется длина.

Вот что я пробовал до сих пор:

df_wide <- df %>%
    melt(id.vars = c(Route, Address, Week)) %>%
    dcast(Route + Address ~ variable + Week)

Данные:

df <- read.table(text = "
    Route    Week    Address    V1    V2    V3    V4    V5
    A    Week1    12345_SE_Court    0    1    0    0    0
    A    Week2    12345_SE_Court    0    0    1    1    1
    B    Week1    98765_NW_Drive    1    1    0    0    1
    B    Week2    98765_NW_Drive    0    1    0    1    0
    C    Week1    10293_SW_Road     0    0    0    0    1
    C    Week2    10293_SW_Road     1    0    0    0    1
    A    Week1    33333_NE_Street   0    1    1    0    0
    A    Week2    33333_NE_Street   1    0    1    0    0"
    , header = TRUE)

Желаемый результат:

Route    Address    V1.Week1    V2.Week1    V3.Week1    V4.Week1    V5.Week1    V1.Week1    V2.Week2    V3.Week2    V4.Week2    V5.Week2
A    12345_SE_Court    0           1           0          0            0           0           0           1           1           1
A    33333_NE_Street   0           1           1          0            1           0           1           0           0           0
B    98765_NW_Drive    1           1           0          0            1           0           1           0           1           0              
C    10293_SW_Road     0           0           0          0            1           1           0           0           0           1                        

person philiporlando    schedule 27.06.2018    source источник


Ответы (1)


Вот как это сделать с помощью tidyr. Хитрость в том, что вам нужно сначала сделать gather:

library(tidyr)
df_wide <- df %>%
  gather(key, value, V1:V5) %>%
  unite("key", key, Week, sep = ".") %>%
  spread(key, value)

df_wide
#>   Route         Address V1.Week1 V1.Week2 V2.Week1 V2.Week2 V3.Week1
#> 1     A  12345_SE_Court        0        0        1        0        0
#> 2     A 33333_NE_Street        0        1        1        0        1
#> 3     B  98765_NW_Drive        1        0        1        1        0
#> 4     C   10293_SW_Road        0        1        0        0        0
#>   V3.Week2 V4.Week1 V4.Week2 V5.Week1 V5.Week2
#> 1        1        0        1        0        1
#> 2        1        0        0        0        0
#> 3        0        0        1        1        0
#> 4        0        0        0        1        1

Создано 27 июня 2018 г. с помощью пакета reprex (v0.2.0).

person Melissa Key    schedule 27.06.2018