Skip to content

How to generate factor levels with unequal numbers?

1 message · arun

#
Hi,
vec1<-factor(rep(c("A","B","C"),c(19,8,11)),levels=c("A","B","C"))
sapply(split(vec1,vec1),length)
# A? B? C 
#19? 8 11

#or you could change gl() function
gl.new<-function (n, k, labels = 1:n, ordered = FALSE) {
? out<- numeric()
?? for(i in 1:n){
?? out<- append(out,rep(i,length.out=k[i]))
?? }
?? out<-factor(out)
?? levels(out)<- as.character(labels)
?? class(out)<- c(if (ordered) "ordered", "factor")
?? out
}
?vec2<-gl.new(3,c(19,8,11),labels=LETTERS[1:3])
?identical(vec1,vec2)
#[1] TRUE
gl.new(3,c(19,8,11),labels=LETTERS[1:3],ordered=TRUE)
?#[1] A A A A A A A A A A A A A A A A A A A B B B B B B B B C C C C C C C C C C C
#Levels: A < B < C
A.K.