Search code examples
rdplyrtibblemagrittr

Merge rows in tibble


I'd like to list all Functions my package in a table.

So far I extracted all functions and title from the packages help docs

library(magrittr)
package_info <- library(help = magrittr)$info[[2]]
package_info_tbl <- package_info %>% 
  stringr::str_split(pattern = "\\s+", n = 2, simplify = T) %>%
  tibble::as_tibble(.name_repair = "minimal")
colnames(package_info_tbl) <- c("Function", "Title")

package_info_tbl
#> # A tibble: 13 x 2
#>    Function     Title                                          
#>    <chr>        <chr>                                          
#>  1 "%$%"        magrittr exposition pipe-operator              
#>  2 "%<>%"       magrittr compound assignment pipe-operator     
#>  3 "%>%"        magrittr forward-pipe operator                 
#>  4 "%T>%"       magrittr tee operator                          
#>  5 "[[.fseq"    Extract function(s) from a functional sequence.
#>  6 "debug_fseq" Debugging function for functional sequences.   
#>  7 "debug_pipe" Debugging function for magrittr pipelines.     
#>  8 "extract"    Aliases                                        
#>  9 "freduce"    Apply a list of functions sequentially         
#> 10 "functions"  Extract the function list from a functional    
#> 11 ""           sequence.                                      
#> 12 "magrittr"   magrittr - Ceci n'est pas un pipe              
#> 13 "print.fseq" Print method for functional sequence.

Created on 2020-03-29 by the reprex package (v0.3.0)

I found that some rows are seperated and result in 2 or more rows if the title is long. How to merge these rows?


Solution

  • We can replace blank with NA values, use fill to replace NA with previous value in Function column, group_by Function and create one concatenated string for each Function.

    library(dplyr)
    
    package_info_tbl %>%
      na_if('') %>%
      tidyr::fill(Function)  %>%
      group_by(Function) %>%
      summarise(Title = paste(Title, collapse = " "))
    
    
    # A tibble: 12 x 2
    #   Function   Title                                                
    #   <chr>      <chr>                                                
    # 1 [[.fseq    Extract function(s) from a functional sequence.      
    # 2 %<>%       magrittr compound assignment pipe-operator           
    # 3 %>%        magrittr forward-pipe operator                       
    # 4 %$%        magrittr exposition pipe-operator                    
    # 5 %T>%       magrittr tee operator                                
    # 6 debug_fseq Debugging function for functional sequences.         
    # 7 debug_pipe Debugging function for magrittr pipelines.           
    # 8 extract    Aliases                                              
    # 9 freduce    Apply a list of functions sequentially               
    #10 functions  Extract the function list from a functional sequence.
    #11 magrittr   magrittr - Ceci n'est pas un pipe                    
    #12 print.fseq Print method for functional sequence.