2

順序付けられていない因子 ID、各レベルのランクの参照ベクトル、および各レベルのラベルが与えられます。ここで、指定されたランクで ID を並べ替え、その後、因子内のラベルをオーバーライドしたいと考えています。

より良い方法があれば、アドバイスをお願いします。

ID<-factor(c(1,2,2,3,1,3,3,2,1,1)+10)
Rank<-c("11"=3,"12"=1,"13"=2)
Label<-c("11"="B","12"="A","13"="C")
ID.Rank<-factor(ID, levels=names(Rank),labels=Rank)
ID.Rank<-factor(ID.Rank, levels=sort(Rank),order=T)
ID.Label<-factor(ID, levels=names(Label),labels=Label)
data.frame(ID,ID.Rank,ID.Label)
### here is importent that ID.Rank has a certain order. 
factor(ID.Rank, labels=Label[match(levels(ID.Rank), Rank)])
4

3 に答える 3

2
 myFac <- factor(ID, levels=Rank, labels=names(Rank) )
 myFac
 [1] 3 3 2 2 3 1 1 2 2 3
Levels: 1 < 2 < 3

 match(levels(myFac), names(Label) )
[1] 1 2 3
 Label[match(levels(myFac), names(Label) )]
  1   2   3 
 "B" "A" "C" 
 levels(myFac) <- Label[match(levels(myFac), names(Label) )]
 myFac
#-----
 [1] C C A A C B B A A C
Levels: B < A < C
于 2013-09-16T16:28:03.053 に答える
1

Rankとが常に同じ順序であると仮定するとLabel、ラベルを適切に並べ替えてから、それらを使用して順序付き因子を作成するだけで済みます。

ID <- factor(c(1,2,2,3,1,3,3,2,1,1)+10)
Rank <- c("11"=3,"12"=1,"13"=2)
Label <- c("11"="B","12"="A","13"="C")

Label <- Label[order(Rank)]
factor(ID, levels=names(Label), labels=Label, order=TRUE)
## [1] B A A C B C C A B B
## Levels: A < C < B
于 2013-09-17T13:26:12.200 に答える