Как добавить переменные с одинаковым идентификатором записи, но с несколькими именами в R? - PullRequest
0 голосов
/ 18 апреля 2020

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

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 (), но она не сработала. Буду признателен, если кто-то может помочь. Спасибо!

1 Ответ

1 голос
/ 18 апреля 2020

Вы можете использовать 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]>

update:

Используйте это:

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  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...