Вот tidyverse
возможность:
data %>%
rowid_to_column() %>%
gather(var, val, -rowid) %>%
arrange(rowid) %>%
mutate(temp = ifelse(parse_number(var) %% 2 == 0, 1, NA),
var2 = ifelse(temp == 1 & is.na(lag(temp, default = 0)),
paste("Var", lag(val), sep = "_"), NA)) %>%
na.omit() %>%
select(-var, -temp) %>%
spread(var2, val) %>%
select(-rowid)
Var_2 Var_3
1 12 1
2 13 23
3 24 33
Сначала генерируется уникальный идентификатор строки. Во-вторых, он преобразует данные из широкого формата в длинный. В-третьих, он проверяет, состоят ли имена столбцов из четного числа. Если это так, он присваивает 1, в противном случае NA. Затем, если это четное число, а запаздывание равно NA, оно объединяет «Var» и значение из запаздывающего столбца. Наконец, он удаляет значения NA и возвращает его обратно в широкоформатный формат.