转置数据帧

时间:2012-12-02 13:57:30

标签: r transpose

我正在使用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)如何解决问题?

1 个答案:

答案 0 :(得分: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-world"不会完全令人满意。或者,你可以学会像真正的useR一样思考并使用row.names(z)