Мы можем использовать shift
out <- cbind(p1, p1[, shift(.SD, type = 'lead',
n = c(0, seq_len(.N-1)))][rep(1, nrow(p1))])
setnames(out, make.unique(c(names(p1), rep(names(p1), each = nrow(p1)))))
или с tidyverse
library(tidyverse)
pmap_dfc(p1, list) %>%
uncount(nrow(p1))
Если нам также нужны исходные данные
pmap_dfc(p1, list) %>%
rowr::cbind.fill(p1, .)
# a b a b a1 b1 a2 b2
#1 10.34 15.3 10.34 15.3 25.87 183.2 53.2 34.8
#2 25.87 183.2 10.34 15.3 25.87 183.2 53.2 34.8
#3 53.20 34.8 10.34 15.3 25.87 183.2 53.2 34.8
Или с transpose
и bind_cols
purrr::transpose(p1) %>%
bind_cols %>%
rowr::cbind.fill(p1, .)