数据框转置

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)问题应该如何修复?


ID不是一列,它作为列名开始,因此它变成了行名。它可以转换为一列。 - Glen_b
1
要将行名称作为列,您可以执行z$ID<-rownames(z)。 - Didzis Elferts
不是很清楚——但我认为AB_*是行名,而不是数据列。这就是你感到困惑的原因。我敢打赌你会发现z[,3]不存在。 - Carl Witthoft
你的对象y已经是一个带有ID列的数据框,所以也许你会对此感到满意?无论如何,你真的应该阅读http://cran.r-project.org/doc/manuals/R-intro.pdf。 - flodel
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世界”来的,你的期望可能不会完全得到满足。另外,你可以学习像真正的useR一样思考,并使用row.names(z)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接