2016-11-18 170 views
1

我有数据R:`ID:在添加ID列时强迫LHS添加到列表中,为什么?

 N11.1 N22.2 N33.1 N44.1 N21.1 N31.1 N32.1 
Sinus  1  0  0 0.0  0  0 12.0 
ArrAHB  1  0  0 0.1  0  0 20.9 

,我想与价值SinusArrAHB添加一个额外的列ID

require(lattice) 
Sinus<-c(1,0,0,0,0,0,12) 
ArrAHB<-c(1,0,0,0.1,0,0,20.9) 
Labels<-c("N11.1","N22.2","N33.1","N44.1","N21.1","N31.1","N32.1") 
ID<-c("Sinus","Arr/AHB") 
data.female<-data.frame(Sinus,ArrAHB,row.names=Labels) 
data.female<-t(data.female) 

> data.female$ID<-ID 

Warning message: 
In data.female$ID <- ID : Coercing LHS to a list 

为什么ID列的创建导致data.frame胁迫?

P.我的目标是获得这种数据的形式如herebarchart(N11.1+N22.1+N33.1+N44.1+N21.1+N31.1+N32.1 ~ ID, data=data.female)这需要一个新的ID列here,我不明白为什么此ID添加有时工作,有时不。请解释。

+2

't'返回一个矩阵。你不能使用'$ < - '来分配一个矩阵。因此,R将矩阵强制为一个列表。你可能以不理想的方式接近这一点,但我不确定情节应该是什么样子,因此不能提出一个好的选择。 – Roland

回答

3

这是抛出警告,因为转置t()的结果是矩阵。 Matricies没有可访问的列名称。使用as.data.frame()

这可以工作。您必须强制将矩阵转换为数据帧。

Sinus<-c(1,0,0,0,0,0,12) 
ArrAHB<-c(1,0,0,0.1,0,0,20.9) 
Labels<-c("N11.1","N22.2","N33.1","N44.1","N21.1","N31.1","N32.1") 
ID<-c("Sinus","Arr/AHB") 
data.female<-data.frame(Sinus,ArrAHB,row.names=Labels) 
data.female<-as.data.frame(t(data.female)) 

data.female$ID<-ID 

请记住,数据帧是按列而不是按行定义的。数据框定义应按列。

+0

谢谢你,简单和工作+1 – hhh