在 R 中按照所需顺序重新排列数据框的列

3

我有一个如下所示的数据框,想要改变其列的顺序。我希望列按照以下顺序排列:1、4、2、5、3、6。我该如何重新排序?请注意,这只是一个小例子,我有很多更多的列需要按照这种方式排序。通用公式为第一批为1+3x,第二批为2+3x,最后一批为3+3x,其中x=0,1,2,....

dput(medg)
structure(list(X1 = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 
3, 3, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 1, 2, 3, 1, 
2, 3), X2 = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2), 
    X3 = c(2, 3, 1, 2, 3, 1, 3, 1, 2, 3, 1, 2, 1, 2, 3, 1, 2, 
    3, 2, 3, 1, 2, 3, 1, 3, 1, 2, 3, 1, 2, 1, 2, 3, 1, 2, 3), 
    X4 = c(1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 
    1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 2), 
    X5 = c(0, 0.2622587, 0.1040687, 0.1409907, 0, 0, 0.6184543, 
    0.9525439, 0.7830234, 0.3400703, 0.2622587, 0.6184543, 0.3765996, 
    0.907851, 0.5296791, 0.1040687, 0.9525439, 0.3765996, 0.5567241, 
    0.3325466, 0.1409907, 0.7830234, 0.907851, 0.5567241, 0.2221638, 
    0, 0.3400703, 0.5296791, 0.3325466, 0.2221638, 0, 0, 0, 0, 
    0, 0)), class = "data.frame", row.names = c(NA, -36L))
```

你能详细解释一下你想要的通用解决方案吗? - Gregor Thomas
1个回答

2
我们可以创建一个 矩阵 来重新排列列顺序。
medg[c(matrix(seq_along(medg), ncol = 3, byrow = TRUE))[seq_along(medg)]]

另外,如果我们想使用 3 *

i1 <- rep(seq_len(ceiling(ncol(medg)/2)), each = 2) + 3 * (0:1)
medg[i1[seq_along(medg)]]

谢谢。除此之外,在第一部分中,我会放置我拥有的任意数量的节点,第二部分我不太确定如何处理超过2个节点。 - statwoman
假设我有更多的列,那么顺序将是1、4、7、2、5、8、3、6、9。看起来我有三个元素(节点),每个元素有三列。 - statwoman
@statwoman或许应该将2改为floor(ncol(medg)/2) - akrun
@statwoman,我认为你需要在第一个案例中指定ncol = 3作为一般情况。 - akrun
假设您的 medg2 有9列,则 c(matrix(seq_along(medg2), byrow = TRUE, ncol = 3))# [1] 1 4 7 2 5 8 3 6 9 - akrun
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接