堆叠数据框中的列

时间:2021-05-28 08:51:39

标签: r dataframe stack

有人可以帮我堆叠以下数据帧,使 a 和 1s 和 2s 相互叠加,最好使用管道并形成 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))

谢谢

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

使用 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    
相关问题