I have a Dataframe that looks roughly like this:
my_data <- tribble(
~Main, ~VAR1a, ~VAR1b, ~VAR1c, ~VAR2a, ~VAR2b, ~VAR2c,
"A", "B", "C", "D", 1, 1, 1,
"B", "A", "D", "", 1, 2, NA,
"C", "D", "A", "", 2, 1, NA
)
# A tibble: 3 x 7
Main VAR1a VAR1b VAR1c VAR2a VAR2b VAR2c
<chr> <chr> <chr> <chr> <dbl> <dbl> <dbl>
1 A B C "D" 1 1 1
2 B A D "" 1 2 NA
3 C D A "" 2 1 NA
I want to pivot this data frame longer based on the VAR1a, VAR1b, and VAR1c.
Which is quite easy to do:
my_data %>%
pivot_longer(names_to = c("VAR1"),
cols = c("VAR1a", "VAR1b", "VAR1c"))
# A tibble: 9 x 6
Main VAR2a VAR2b VAR2c VAR1 value
<chr> <dbl> <dbl> <dbl> <chr> <chr>
1 A 1 1 1 VAR1a "B"
2 A 1 1 1 VAR1b "C"
3 A 1 1 1 VAR1c "D"
4 B 1 2 NA VAR1a "A"
5 B 1 2 NA VAR1b "D"
6 B 1 2 NA VAR1c ""
7 C 2 1 NA VAR1a "D"
8 C 2 1 NA VAR1b "A"
9 C 2 1 NA VAR1c ""
My problem is, however, that the columns VAR2a, VAR2b, and VAR2c are directly related to VAR1a, VAR1b, and VAR1c (so, the letter after the variable number shows association). For example, VAR2a is the value that Main has assigned to VAR1a and so on.
Ideally I would like to have something that looks like this:
# A tibble: 9 x 4
Main value VAR1 VAR2
<chr> <chr> <chr> <dbl>
1 A "B" VAR1a 1
2 A "C" VAR1b 1
3 A "D" VAR1c 1
4 B "A" VAR1a 1
5 B "D" VAR1b 2
6 B "" VAR1c NA
7 C "D" VAR1a 2
8 C "A" VAR1b 1
9 C "" VAR1c NA
I can't figure out how to do this with pivot_longer() or whether it is even possible to do with tidyverse.