Как добавить переменные из одного идентификатора записи, но с несколькими именами в R?

У меня возник вопрос, когда я пытался упорядочить данные. У меня есть фрейм данных, как показано ниже:

ID price  location
1  10.2    A
2   9.0    B
2   9.0    C
3   8.5    F
3   8.5    G

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

ID price  location
1  10.2    A
2   9.0    B C
3   8.5    F G

Я хочу удалить повторяющиеся идентификаторы и переместить разные места в один столбец. Я пробовал функцию pivot_wider (), но не вышло. Буду признателен, если кто-нибудь может помочь. Спасибо!


person Stella    schedule 18.04.2020    source источник


Ответы (1)


Вы можете использовать mutate и nest()

library(tidyverse)

dfr%>%group_by(ID, price)%>%nest()%>%
   mutate(location = map(data, ~select(.x, location)))%>%
   select(ID, price, location)%>%ungroup()

# A tibble: 3 x 3
     ID price location        
  <dbl> <dbl> <list>          
1     1  10.2 <tibble [1 × 1]>
2     2   9   <tibble [2 × 1]>
3     3   8.5 <tibble [2 × 1]>

Обновить:

Использовать этот:

dfr%>%group_by(ID, price)%>%nest()%>%
  mutate(location = map(data, ~stringi::stri_paste(.x$location,collapse=',')))%>%
  unnest(location)%>%
  select(ID, price, location)%>%ungroup()

# A tibble: 3 x 3
     ID price location
  <dbl> <dbl> <chr>   
1     1  10.2 A       
2     2   9   B,C     
3     3   8.5 F,G  

Гораздо более простой способ:

dfr%>%group_by(ID, price)%>%
  summarise(location = stringi::stri_paste(location,collapse=','))

# A tibble: 3 x 3
# Groups:   ID [3]
     ID price location
  <dbl> <dbl> <chr>       
1     1  10.2 A           
2     2   9   B,C         
3     3   8.5 F,G  
person Kay    schedule 18.04.2020
comment
как насчет упрощения до dfr %>% group_by(ID, price) %>% nest()? - person stefan; 18.04.2020
comment
Спасибо! Я только что пробовал, но похоже столбец локации теперь тиббл? Я использовал функцию view (), чтобы увидеть фрейм данных, он выглядит так же, как и раньше. Есть ли способ изменить тип столбца на char? - person Stella; 18.04.2020
comment
Смотрите мой обновленный ответ. Все зависит от того, что вы хотите сделать с результатом - хотите ли вы сохранить какие-то переменные или нет. В ответе, в котором используется summarise, попробуйте заменить summarise на mutate и посмотрите, что произойдет. - person Kay; 18.04.2020