如何将数据框中的列重新排序为最后一列

时间:2012-02-24 03:25:16

标签: r dataframe

我有一个数据框,其中不断添加列。我还有一个完整的专栏,我想留在最后。我想我必须在某处跳过一些非常基本的命令,但似乎无法在任何地方找到答案。无论如何,这里有一些示例数据:

x=1:10
y=21:30
z=data.frame(x,y)
z$total=z$x+z$y
z$w=11:20
z$total=z$x+z$y+z$w

当我输入z时,我明白了:

    x  y total  w
1   1 21    33 11
2   2 22    36 12
3   3 23    39 13
4   4 24    42 14
5   5 25    45 15
6   6 26    48 16
7   7 27    51 17
8   8 28    54 18
9   9 29    57 19
10 10 30    60 20

注意总列在w之前是如何出现的,显然是任何后续列。有没有办法可以强迫它成为最后一栏?我猜我必须以某种方式使用ncol(z)。或许不是。

2 个答案:

答案 0 :(得分:4)

这里有一个逻辑问题。无论何时添加到data.frame,它都会向右增长。

最容易修复:在完成之前保持一个向量,然后才附加它。它将是最右边的专栏。

(对于关键应用程序,您当然会事先确定宽度k,分配k+1列,然后将最后一列编入索引。)

答案 1 :(得分:4)

您可以按如下方式对列进行重新排序:

z <- z[,c('x','y','w','total')]

要以编程方式执行此操作,在添加完列后,您可以检索其名称,如下所示:

nms <- colnames(z)

然后你可以抓住那些不是'总'的那些:

nms[nms!='total']

结合上述内容:

z <- z[, c(nms[nms!='total'],'total')]