'How best to unstack this and make for one long data string
Below is the sample data and the desired result. Yes, I know that there are four columns not listed in the desired out. It is just to keep it simple. Figuring if I can get the first four created then the next four are not that bad. Any ideas on how to accomplish this? My first attempts have been to use pivot_wider but struggling to get the column names that have year and month to create.
state <- c(32,32,32,32,32,32,32,32)
indcode <-c(44,44,44,44,45,45,45,45)
area <-c("000000","000000","000000","000000","000000","000000","000000","000000")
areatype <-c("01","01","01","01","01","01","01","01")
ownership <-c("00","00","00","00","00","00","00","00")
periodyear <-c(2018,2019,2020,2021,2018,2019,2020,2021)
January <- c(44,90,45,91,46,92,48,96)
February <- c(44,91,46,91,48,92,49,99)
example <- data.frame(state,indcode,area,areatype,ownership,periodyear,January,February)
state indcode area areatype ownership 2018m1 2018m2 2019m1 2019 m2
32 44 000000 01 00 44 44 90 91
32 45 000000 01 00 46 48 92 92
Solution 1:[1]
library(tidyverse)
example %>%
pivot_longer(January:February, names_to = "month") %>%
mutate(mo_num = match(month, month.name)) %>%
mutate(col_name = paste(periodyear, mo_num, sep = "m")) %>%
select(-periodyear, -month, -mo_num) %>%
pivot_wider(names_from = col_name, values_from = value)
Result
# A tibble: 2 x 13
state indcode area areatype ownership `2018m1` `2018m2` `2019m1` `2019m2` `2020m1` `2020m2` `2021m1` `2021m2`
<dbl> <dbl> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 32 44 000000 01 00 44 44 90 91 45 46 91 91
2 32 45 000000 01 00 46 48 92 92 48 49 96 99
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Jon Spring |
