首页 > 解决方案 > 重新排列多列数据框

问题描述

我想按如下方式重新排列我的数据框:前 3 列必须附加在另一列下方以及第二 3 列。必须根据数据框重新排列来保留 ID 和 Class 列。

起始数据框 IDdf

set.seed(1)
 df <- data.frame(ID = rep(c("CT1", "CT2", "CT3", "SB1", "SB2","SB3","AM1", "AM2", "AM3")),
                     Class = rep(c("CT", "SB", "AM"), each = 3),
                     replicate(6,sample(0:100,9,rep=TRUE)))

输出是df2

set.seed(1)
    df2 <- data.frame(ID = c(rep(c("CT1", "CT2", "CT3", "SB1", "SB2","SB3","AM1", "AM2", "AM3" ), times=3)),
                            Class =  rep(rep(c("CT", "SB", "AM"), each= 3), times=3),
                            replicate(2,sample(0:100,27,rep=TRUE)))

我尝试了几种使用mergebyid.vars IDClass

标签: rdataframe

解决方案


我们可能会使用

data.frame(df[, c("ID", "Class")], X1 = unlist(df[, 3:5]), X2 = unlist(df[, 6:8]))
#      ID Class X1 X2
# X11 CT1    CT 26 38
# X12 CT2    CT 37 87
# X13 CT3    CT 57 34
# X14 SB1    SB 91 48
# X15 SB2    SB 20 60
# X16 SB3    SB 90 49
# ...

前两列通过回收扩展,而另外两列则使用unlist. 如果这是您的实际问题并且没有数百个这样的三元组,那么在这种情况下实际上不需要花哨的东西。


推荐阅读