Если у меня есть следующие данные:
D = tibble::tribble(
~firm, ~ind, ~var1_1, ~var1_2, ~op2_1, ~op2_2,
"A", 1, 10, 11, 11, 12,
"A", 2, 12, 13, 13, 14,
"B", 1, 14, 15, 15, 16,
"B", 2, 16, 17, 17, 18,
"C", 1, 18, 19, 19, 20,
"C", 2, 20, 21, 21, 22,
)
Как я могу pivot_longer()
var1 и var2 иметь "_ *" в качестве индикатора года?
Я имею в виду, я хотел бы иметь что-то вроде этого:
D %>%
pivot_longer(var1_1:op2_2,
names_to = c(".value", "year"),
names_pattern = "(.*)_(.*)",
values_to = c("var1, var2")
)
# A tibble: 12 x 5
firm ind year var1 op2
<chr> <dbl> <chr> <dbl> <dbl>
1 A 1 1 10 11
2 A 1 2 11 12
3 A 2 1 12 13
4 A 2 2 13 14
5 B 1 1 14 15
6 B 1 2 15 16
7 B 2 1 16 17
8 B 2 2 17 18
9 C 1 1 18 19
10 C 1 2 19 20
11 C 2 1 20 21
12 C 2 2 21 22
Я достигаю желаемого результата, используя код выше. Однако в моем реальном случае я имею дело с более чем 30 переменными и 10 годами. Тогда использование values_to
не практично и не чисто. Я бы хотел, чтобы код прочитал первую часть имени переменной как желаемое имя новой переменной. Поскольку изначально все столбцы, подлежащие повороту, структурированы как "varname_year" .
Кроме того, как только я получу новый формат данных в long, мне может понадобиться go вернуться к Широкоформатное хранение исходной структуры данных.