2012-02-24 35 views
1

我有一個數據框,其中的列不斷添加到它。我還有一個我想留在最後的專欄。我認爲我必須跳過一些非常基本的命令,但似乎無法在任何地方找到答案。總之,這裏是一些樣本數據:如何重新排列數據幀中的列作爲最後一列

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)。或者可能不是。

回答

4

您可以重新排序列如下:

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

要以編程方式完成此操作,請在完成添加列後完成以下操作:

nms <- colnames(z) 

然後你就可以抓住這不是「總」,像這樣的:

nms[nms!='total'] 

除了上述情形:

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

這裏有一個邏輯問題。無論何時添加到data.frame,它都會向右增長。

最簡單的修復方法:保留一個矢量直到完成,然後才追加它。它將成爲最右邊的一列。

(對於關鍵應用程序,你當然會確定你的寬度k事前,分配k+1列,只是指數的最後一個總數。)