在R中将行值转换为列名

6
假设我有以下数据框:
a<-data.frame(A=3,B=9,C=10,D=6)
b<-data.frame(A="i3",B="i9",C="i10",D="i6")
c<-data.frame(A=3,B=9,C=10,D=6)
d<-data.frame(A=3,B=9,C=10,D=6)
e<-rbind(a,b,c,d)
print(e)
   A  B   C  D
1  3  9  10  6
2 i3 i9 i10 i6
3  3  9  10  6
4  3  9  10  6

我正在尝试转换数据框,使第二行的值成为数据框的列名,从而产生以下结果:

print(f)
  i3 i9 i10 i6
1  3  9  10  6
3  3  9  10  6
4  3  9  10  6

我已经写了以下内容:
f<-e[-2,]
colnames(f)<-e[2,]

这种方法似乎适用于小型数据框,但对于较大的数据框似乎不起作用。例如,以下是较大数据框的片段:

print(results2t)
                     V1    V2    V3
analysisID          118   118   118
Node                20    20    20
Dependent_Variable  i1    i1    i1
Item                b1    b17   i10
Overall_B_value    -.03   .04  -.17
Overall_Std.Error   .04   .08   .05

我已经运行了以下内容:

results2t2<-results2t[-4,]
colnames(results2t2)<-results2t["Item",]

并且也
colnames(results2t2)<-results2t["Item",]

无论哪种方式都不起作用(我正在尝试将“Item”行中的值作为列名),因为我获得的所有列名都是13:

print(results2t2)
                     13    13    13
analysisID          118   118   118
Node                20    20    20
Dependent_Variable  i1    i1    i1
Overall_B_value    -.03   .04  -.17
Overall_Std.Error   .04   .08   .05

有什么想法吗?

1
当您在较大的数据框上尝试时会发生什么? - Pierre L
2
请提供一个示例,说明它无法正常工作。 - Jaap
1
请指出您得到的输出有什么问题。 - Heroka
2个回答

4
以下内容对我有效:
#make sure you use unlist to convert the data.frame to a vector containing 
#the wanted names
colnames(results) <- unlist(results[row.names(results)=='Item',])
#remove the unneeded row
results           <- results[!row.names(results)=='Item',]

输出:

> results
                     b1 b17  i10
analysisID          118 118  118
Node                 20  20   20
Dependent_Variable   i1  i1   i1
Overall_B_value    -.03 .04 -.17
Overall_Std.Error   .04 .08  .05

2
你只需要使用unlist函数:
colnames(results2t2)<-unlist(results2t["Item",])
results2t2
#                      b1 b17  i10
# analysisID          118 118  118
# Node                 20  20   20
# Dependent_Variable   i1  i1   i1
# Overall_B_value    -.03 .04 -.17
# Overall_Std.Error   .04 .08  .05

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