У вас не должно быть повторяющихся имен столбцов в кадре данных, мы исправляем это, используя make.unique
.
names(df) <- make.unique(names(df))
Затем мы можем удалить пустые строки и получить данные в длинном формате, используя pivot_longer
.
library(dplyr)
library(tidyr)
df %>%
filter(orig != '' | dest != '') %>%
pivot_longer(cols = -c(orig, dest),
names_to = c('.value', 'index'),
names_sep = '\\.') %>%
select(-index)
Для обновленного набора данных мы можем использовать:
df %>%
pivot_longer(cols = -c(orig, dest), names_to = 'year') %>%
mutate(.copy = c('cartrip', 'walking')[.copy]) %>%
pivot_wider(names_from = .copy, values_from = value)
# orig dest year cartrip walking
# <fct> <fct> <chr> <int> <int>
# 1 Seoul Inchon 1997 543 543
# 2 Seoul Inchon 2002 524 524
# 3 Seoul Inchon 2006 364 364
# 4 Seoul Inchon 2010 452 452
# 5 Seoul Inchon 2016 845 845
# 6 Seoul Gyeongi 1997 543 543
# 7 Seoul Gyeongi 2002 524 524
# 8 Seoul Gyeongi 2006 364 364
# 9 Seoul Gyeongi 2010 452 452
#10 Seoul Gyeongi 2016 845 845
#11 Inchon Seoul 1997 543 543
#12 Inchon Seoul 2002 524 524
#13 Inchon Seoul 2006 364 364
#14 Inchon Seoul 2010 452 452
#15 Inchon Seoul 2016 845 845