Прямоугольник данных?Я могу изменить / свернуть несколько строк данных на основе уникального идентификатора в одну ячейку в R? - PullRequest
0 голосов
/ 06 июня 2018

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

mydf = data_frame(x=c(rep("A",3),rep("B",3),rep("C",3)),
                  y=letters[1:9])

mydf
# A tibble: 9 x 2
  x     y    
  <chr> <chr>
1 A     a    
2 A     b    
3 A     c    
4 B     d    
5 B     e    
6 B     f    
7 B     g    
8 B     h    
9 B     i  

Я хочу запустить некоторый код ... в идеале через некоторое использованиеиз tidyverse, как mydf %>% mutate(y = I'm really not sure, maybe one of the map functions), а затем окончательный фрейм данных выглядит следующим образом:

better = data_frame(x=c("A","B","C"),
                    y=list(c(letters[1:3]),c(letters[4:6]),c(letters[7:9])))
better
# A tibble: 3 x 2
  x     y        
  <chr> <list>   
1 A     <chr [3]>
2 B     <chr [4]>
3 C     <chr [3]>

better$y
[[1]]
[1] "a" "b" "c"

[[2]]
[1] "d" "e" "f"

[[3]]
[1] "g" "h" "i"

Как упоминалось ранее, мои данные намного больше и грязнее, и, надеюсь, в конечном итоге, в приложении Shinyпоэтому он должен быть полностью автономным, поэтому ищет глубокое понимание функций, доступных для этой работы.Я полагаю, что для этого может потребоваться несколько больше шагов, чем просто mutate, возможно создание отдельного фрейма данных, аналогичного better, а затем left_join его возврат к оригиналу.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Используйте функцию гнезд от tidyr.

library(tidyverse)
mydf %>% nest(-x)
# A tibble: 3 x 2
  x    data            
  <chr> <list>          
1 A     <tibble [3 x 1]>
2 B     <tibble [3 x 1]>
3 C     <tibble [3 x 1]>
0 голосов
/ 06 июня 2018

Нам нужна группа по summarise, где мы заключаем 'y' в list

out <- mydf %>%
        group_by(x) %>% 
        summarise(y = list(y))
# A tibble: 3 x 2
#  x     y        
#  <chr> <list>   
#1 A     <chr [3]>
#2 B     <chr [3]>
#3 C     <chr [3]>

out$y
#[[1]]
#[1] "a" "b" "c"

#[[2]]
#[1] "d" "e" "f"

#[[3]]
#[1] "g" "h" "i"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...