Как мне изменить способ организации моих данных? - PullRequest
1 голос
/ 10 июля 2020

Мои данные в настоящее время организованы в виде следующего метода (фактические данные см. В первой таблице ниже). Я показываю только часть общих данных , поскольку полное изображение довольно велико (более 100 строк).

Row   September        October         November        December      January        February       March        April       May            June          July       
1     Chino Hills      Huntington Bea~ Fountain Valley Anaheim       Fountain Vall~ Arcadia        Anaheim      Newport Be~ Santa Ana      NA            NA         
2     Irvine           Cerritos        Long Beach      Chino Hills   Cerritos       Anaheim        NA           Banning     Newport Beach  Anaheim       NA         
3     Glendale         NA              West Covina     Monterey Park Encino         NA             Monterey Pa~ NA          Los Angeles    Cerritos      Beverly Hi~
4     Norco            Fountain Valley NA              Monterey Park NA             Long Beach     NA           Santa Ana   Huntington Be~ Fountain Val~ NA         
5     Los Angeles      Inglewood       West Covina     Glendale      NA             Glendale       NA           Granada Hi~ Chino          West Covina   Tarzana

Я хочу изменить способ его организации, чтобы он показывает следующее. Я хочу подчеркнуть, что он покажет все городов, а не только те, которые я выбрал для перечисления. Это неполная диаграмма, но она дает представление:

+-------------+------------------+--------+----------+
| Chino Hills | Huntington Beach | Irvine | Glendale |
+-------------+------------------+--------+----------+
| Row 1       | Row 1            | Row 2  | Row 3    |
| Row 2       |                  |        | Row 5    |
|             |                  |        | Row 5    |
+-------------+------------------+--------+----------+

Я пробовал tidyr::separate_rows(dfl, col), но это работает, только если города находятся в одной ячейке; однако они находятся в нескольких ячейках в нескольких строках. Вот что происходит, когда я пробую tidyr::separate_rows(dfl, col):

Row   September        October         November        December      January        February       March        April       May            June          July       
   <chr> <chr>            <chr>           <chr>           <chr>         <chr>          <chr>          <chr>        <chr>       <chr>          <chr>         <chr>      
 1 1     Chino Hills      Huntington Bea~ Fountain Valley Anaheim       Fountain Vall~ Arcadia        Anaheim      Newport Be~ Santa Ana      NA            NA         
 2 2     Irvine           Cerritos        Long Beach      Chino Hills   Cerritos       Anaheim        NA           Banning     Newport Beach  Anaheim       NA         
 3 3     Glendale         NA              West Covina     Monterey Park Encino         NA             Monterey Pa~ NA          Los Angeles    Cerritos      Beverly Hi~
 4 4     Norco            Fountain Valley NA              Monterey Park NA             Long Beach     NA           Santa Ana   Huntington Be~ Fountain Val~ NA         
 5 5     Los Angeles      Inglewood       West Covina     Glendale      NA             Glendale       NA           Granada Hi~ Chino          West Covina   Tarzana

Как видите, единственное, что он делает, это добавляет в другую строку чисел, которые мне не нужны.

Таким образом, мне нужна Программа R, чтобы найти все города и сказать, в какой строке они находятся. Строка может появляться более одного раза, если город находится в этой строке более одного раза. Он организует более одного столбца, а не только один стандартный столбец, как в tidyr. Количество столбцов будет зависеть от количества разных городов.

1 Ответ

1 голос
/ 10 июля 2020

Мы можем получить данные в длинном формате, сохранить только уникальные значения для каждого Row и value и получить данные в широком формате. Предполагая, что df - это имя фрейма данных.

library(dplyr)
library(tidyr)

df %>%
   pivot_longer(cols = -Row, values_drop_na = TRUE) %>%
   distinct(Row, value) %>%
   group_by(value) %>%
   mutate(row = row_number()) %>%
   pivot_wider(names_from = value, values_from = Row)
...