2012-12-02 101 views
3

我正在使用R轉置來自Excel文件(mydata.xls)的數據幀。 原始數據幀是這樣的:轉置數據幀

ID   AB_1 AB_2 AB_3 AB_4 AB_5 
Variable1 1  2  3  4  5 
Variable2 1.5 2.8 4.5 5.6 7.8 

這是我想什麼來實現:

ID Variable1 Variable2 
AB_1 1   1.5 
AB_2 2   2.8 
AB_3 3   4.5 
AB_4 4   5.6 
AB_5 5   7.8 

這裏是我做的,按照上similar post in the past的響應。

Library(XLConnect) 
x=loadWorkbook("mydata.xls") 
y=readWorksheet(x,"Summary") 
z=setNames(data.frame(t(y[,-1])),y[,1]) 

然而,這裏是我的了:

z  
     Variable1 Variable2 
AB_1 1   1.5 
AB_2 2   2.8 
AB_3 3   4.5 
AB_4 4   5.6 
AB_5 5   7.8 

兩個問題都注意到了: 1. 「ID」 丟失。 2.當我檢查新的數據幀的第一列,第二列被退回(參見下文)

z[,1] 
[1] 1 2 3 4 5 

不知1)發生了什麼「ID」和整列? 2)問題如何解決?

+0

ID不是一列,它以列名開頭,所以它變成了行名。它可以變成一個專欄。 –

+1

要獲得行名稱作爲列,您可以執行z $ ID <-rownames(z) –

+0

不太清楚 - 但我認爲'AB_ *'是行名稱,而不是一列數據。這就是爲什麼你感到困惑。我敢打賭你會發現'z [,3]'不存在。 –

回答

2

如果你想克服使用col.names形成row.names,而是創建一個名爲列的t.data.frame默認行爲「ID」,然後使用cbind.data.frame功能:

cbind(ID=row.names(z), z) 
#-------------- 
     ID Variable1 Variable2 
AB_1 AB_1   1  1.5 
AB_2 AB_2   2  2.8 
AB_3 AB_3   3  4.5 
AB_4 AB_4   4  5.6 
AB_5 AB_5   5  7.8 

在控制檯(或data.frame結構)中打印的內容中沒有row.names列的名稱,因此您對「Excel世界」的期望不會完全可滿足。或者,你可以學習像一個真正的使用R,並只使用row.names(z)

+0

謝謝。這非常有幫助。 – xuan