Just for variety sake, this would be another approach
library(tidyverse)
library(stringr)
df <- data.frame(
Northwest = as.factor(c("Increased region", "2006", "2007", NA)),
Northwest.1 = as.factor(c("Remained region", "2011", "2012", "2013")),
Northeast = as.factor(c("Increased region", "2006", "2007", NA)),
Red.River.Delta = as.factor(c("Increased region", "2011", "2012", "2013"))
)
df %>%
mutate_all(as.character) %>%
rename(!! set_names(names(.), nm = paste(names(.), .[1,]))) %>%
tail(-1) %>%
gather(Region, Value) %>%
mutate(Region = str_remove_all(Region, "[:punct:]|[:digit:]")) %>%
separate(Region, c("Region", "Label"), extra = "merge") %>%
filter(!is.na(Value))
#> Region Label Value
#> 1 Northwest Increased region 2006
#> 2 Northwest Increased region 2007
#> 3 Northwest Remained region 2011
#> 4 Northwest Remained region 2012
#> 5 Northwest Remained region 2013
#> 6 Northeast Increased region 2006
#> 7 Northeast Increased region 2007
#> 8 RedRiverDelta Increased region 2011
#> 9 RedRiverDelta Increased region 2012
#> 10 RedRiverDelta Increased region 2013