Как свернуть строки по ключевому идентификатору, но сохранить уникальные измерения в новой переменной? - PullRequest
2 голосов
/ 04 мая 2020

У меня есть набор данных, который выглядит следующим образом:

                                Federal.Area State Total_Miles
1                          Allentown, PA--NJ    NJ     1094508
2                          Allentown, PA--NJ    PA     9957805
3            Augusta-Richmond County, GA--SC    GA     6221747
4            Augusta-Richmond County, GA--SC    SC     2101823
5                             Beloit, WI--IL    IL      324238
6                             Beloit, WI--IL    WI      542491

Я хотел бы свернуть строки на Federal.Area, но создать и сохранить новые переменные, которые содержат уникальные State и уникальные Total_Miles так, чтобы это выглядело так:

Federal.Area          State    Total_Miles State1 State2 Total_Miles_state1 Total_Miles_state2
   <fct>                 <fct>       <dbl> <fct>  <fct>              <dbl>            <dbl>
 1 Allentown, PA--NJ     NJ        1094508 NJ     PA               1094508          9957805
 2 Augusta-Richmond Cou… GA        6221747 GA     SC               6221747          2101823
 3 Beloit, WI--IL        IL         324238 IL     WI                324238           542491

Я не знаю, как свернуть переменные State и Total_Miles в одну строку, но как новые переменные с ключом Federal.Area.

1 Ответ

2 голосов
/ 05 мая 2020

Возможно, вы могли бы использовать pivot_wider из tidyverse, чтобы поместить ваши данные в широкий формат.

Сначала пронумеруйте строки внутри каждого Federal.Area как 1 и 2. Затем вызовите pivot_wider, который добавит

library(tidyverse)

df %>%
  group_by(Federal.Area) %>%
  mutate(rn = row_number()) %>%
  pivot_wider(id_cols = Federal.Area, values_from = c(State, Total_Miles), names_from = rn) 

Output

# A tibble: 3 x 5
# Groups:   Federal.Area [3]
  Federal.Area                  State_1 State_2 Total_Miles_1 Total_Miles_2
  <chr>                         <chr>   <chr>           <int>         <int>
1 Allentown,PA--NJ              NJ      PA            1094508       9957805
2 Augusta-RichmondCounty,GA--SC GA      SC            6221747       2101823
3 Beloit,WI--IL                 IL      WI             324238        542491

Data

df <- structure(list(Federal.Area = c("Allentown,PA--NJ", "Allentown,PA--NJ", 
"Augusta-RichmondCounty,GA--SC", "Augusta-RichmondCounty,GA--SC", 
"Beloit,WI--IL", "Beloit,WI--IL"), State = c("NJ", "PA", "GA", 
"SC", "IL", "WI"), Total_Miles = c(1094508L, 9957805L, 6221747L, 
2101823L, 324238L, 542491L)), class = "data.frame", row.names = c(NA, 
-6L))
...