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

根据过去类似帖子的回复,这就是我所做的。

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)如何解决这些问题?

4

1 回答 1

2

如果您想克服t.data.frame使用 col.names 形成 row.names 的默认行为,而是创建一个名为“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 世界”的期望不会完全满足。或者,您可以学习像真正的用户一样思考,然后使用row.names(z).

于 2012-12-02T17:05:21.063 回答