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