Search code examples
rtidyrdata-manipulationspread

Transposing and Filling NAs in R


My data.frame df1 looks like this:

A NA NA B NA NA C NA NA
1  2  3 4  5  6 7  8  9 

I want it to look like this:

A 1
A 2
A 3
B 4
B 5
B 6
C 7
C 8
C 9

Any ideas?


Solution

  • Suppose you have a data.frame like this:

    df <- data.frame(matrix(c("A", NA, NA, "B", NA, NA, "C", NA, NA, 1:9), byrow = TRUE, nrow = 2))
    
    > df
      X1   X2   X3 X4   X5   X6 X7   X8   X9
    1  A <NA> <NA>  B <NA> <NA>  C <NA> <NA>
    2  1    2    3  4    5    6  7    8    9
    

    Using tidyr:

    df %>%
      t() %>% 
      as.data.frame() %>%
      fill(V1, .direction = "down")
    

    gives you

      V1 V2
    1  A  1
    2  A  2
    3  A  3
    4  B  4
    5  B  5
    6  B  6
    7  C  7
    8  C  8
    9  C  9