2012-12-02 69 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