-1

I have a character column with <NA> which I want to replace with the character below the row. An example is below:

df12 <-
  structure(
    list(Reg = structure(c(NA, 1L, 1L, NA, 1L, 1L, NA, 2L, 2L, NA, 2L, 2L, NA, 2L, 2L)
                         , .Label = c("A", "B"), class = "factor")), 
    .Names = "Reg", row.names = c(NA, -15L), class = "data.frame")

df12
Reg
1  <NA>
2     A
3     A
4  <NA>
5     A
6     A
7  <NA>
8     B
9     B
10 <NA>
11    B
12    B
13 <NA>
14    B
15    B

library(dplyr)

Required Output

1     A
2     A
3     A
4     A
5     A
6     A
7     B
8     B
9     B
10    B
11    B
12    B
13    B
14    B
15    B
halfer
  • 19,824
  • 17
  • 99
  • 186
MYaseen208
  • 22,666
  • 37
  • 165
  • 309

2 Answers2

3

We can use the fill by specifying the .direction

library(dplyr)
library(tidyr)
df12 %>%
    fill(Reg, .direction = "up")
akrun
  • 874,273
  • 37
  • 540
  • 662
2

Another option using na.locf faster and strictly designed for filling missing with latest no missing value:

zoo::na.locf(df12,fromLast=TRUE)

#    Reg
# 1    A
# 2    A
# 3    A
# 4    A
# 5    A
# 6    A
# 7    B
# 8    B
# 9    B
# 10   B
# 11   B
# 12   B
# 13   B
# 14   B
# 15   B
agstudy
  • 119,832
  • 17
  • 199
  • 261