在数据框中堆叠列

Stack columns in a data frame

谁能帮我堆叠以下数据框,使 a 以及 1 和 2 相互叠加,最好使用管道形成 3x4 数据框

df <- rbind(data.frame(X1 = 'a', X2 = 1, X3 = 2, X4 = 'a', X5 = 1, X6 = 2), data.frame(X1 = 'a', X2 = 1, X3 = 2, X4 = 'a', X5 = 1, X6 = 2))

谢谢

这是一个data.table解决方案...

library(data.table)
cols <- 3
# Split df to chuncks of 3 (=ncol) columns
L <- split.default(df, f = cols:(ncol(df) + 2) %/% cols)
# Rowbind, ignore columns names
data.table::rbindlist(L, use.names = FALSE)
#    X1 X2 X3
# 1:  a  1  2
# 2:  a  1  2
# 3:  a  1  2
# 4:  a  1  2

使用tidyverse-

library(dplyr)
library(tidyr)

df %>%
  mutate(across(.fns = as.character)) %>%
  pivot_longer(cols = everything()) %>%
  mutate(id = paste0('col', rep(1:3, length.out = n()))) %>%
  group_by(id) %>%
  mutate(name = row_number()) %>%
  pivot_wider(names_from = id, values_from = value) %>%
  select(-name)

#  col1  col2  col3 
#  <chr> <chr> <chr>
#1 a     1     2    
#2 a     1     2    
#3 a     1     2    
#4 a     1     2