Folkes, Michael
2009-Oct-08 17:52 UTC
[R] problem understanding factor levels for use lattice panel order
Hello all, In order to get the desired order of panels within lattice I realized I needed to define my factor levels. I now see how to properly do it (attached code), but: 1. I don't understand why I have to use factor() on a variable that is already a factor, and why levels() alone doesn't work to readjust the level order. 2. I just noticed that if I do use levels(xx$v1), it's changing something that can't be repaired with: xx$v1<-factor(xx$v1,levels=c('b','a','c')), and both plots are wrong. I'm failing to grasp what levels() is doing compared to factor(). thanks very much. Michael Folkes #__________________________________ xx<-data.frame(v1=rep(letters[1:3],rep(3,3)),v2=rep(1:3,3),v3=rep(1:3,rep(3,3))) str(xx) levels(xx$v1) #INCORRECT: #if I run this level(), the factor() below doens't work properly #levels(xx$v1)<-c('b','a','c') xx g1<-xyplot(v3~v2|v1,data=xx) #CORRECT: xx$v1<-factor(xx$v1,levels=c('b','a','c')) g2<-xyplot(v3~v2|v1,data=xx) xx print(g1,split=c(1,1,2,1),more=T) print(g2,split=c(2,1,2,1),more=F) _______________________________________________________ Michael Folkes Salmon Stock Assessment Canadian Dept. of Fisheries & Oceans Pacific Biological Station 3190 Hammond Bay Rd. Nanaimo, B.C., Canada V9T-6N7 Ph (250) 756-7264 Fax (250) 756-7053 Michael.Folkes@dfo-mpo.gc.ca <mailto:Michael.Folkes@dfo-mpo.gc.ca> [[alternative HTML version deleted]]
Rolf Turner
2009-Oct-08 19:54 UTC
[R] problem understanding factor levels for use lattice panel order
On 9/10/2009, at 6:52 AM, Folkes, Michael wrote:> Hello all, > In order to get the desired order of panels within lattice I > realized I needed to define my factor levels. > I now see how to properly do it (attached code), but: > 1. I don't understand why I have to use factor() on a variable that > is already a factor, and why levels() alone doesn't work to > readjust the level order. > 2. I just noticed that if I do use levels(xx$v1), it's changing > something that can't be repaired with: > xx$v1<-factor(xx$v1,levels=c('b','a','c')), and both plots are wrong. > I'm failing to grasp what levels() is doing compared to factor(). > thanks very much. > Michael Folkes > > #__________________________________ > > xx<-data.frame(v1=rep(letters[1:3],rep(3,3)),v2=rep(1:3,3),v3=rep > (1:3,rep(3,3))) > str(xx) > levels(xx$v1) > > #INCORRECT: > #if I run this level(), the factor() below doens't work properly > #levels(xx$v1)<-c('b','a','c') > xx > g1<-xyplot(v3~v2|v1,data=xx) > > #CORRECT: > xx$v1<-factor(xx$v1,levels=c('b','a','c')) > g2<-xyplot(v3~v2|v1,data=xx) > xx > print(g1,split=c(1,1,2,1),more=T) > print(g2,split=c(2,1,2,1),more=F)The object xx$v1 is ``really'' the vector of indices 1 1 1 2 2 2 3 3 3 Initially it has a levels attribute c('a','b','c') which says to associate the symbol 'a' with index 1, 'b', with index 2, and 'c' with index 3. When you type xx$v1 you see the sequence a a a b b b c c c. The call levels(xx$v1) <- c('b','a','c') says to associate the symbol 'b' with index 1, 'a', with index 2, and 'c' with index 3. Now when you type xx$v1 you see the sequence b b b a a a c c c. The call xx$v1 <- factor(xx$v1,levels=c('b','a','c')) (done ***instead*** of the the call levels(xx$v1) <- c('b','a','c')) essentially replaces xx$v1 by match(xx$v1,c('b','a','c')) so that now xx$v1 is ``really'' the vector of indices 2 2 2 1 1 1 3 3 3. The levels attribute says that 'b' is associated with 1, 'a' is associated with 2, and 'c' is associated with 3. So when you type xx$v1 you see a a a b b b c c c as before. cheers, Rolf Turner ###################################################################### Attention:\ This e-mail message is privileged and confid...{{dropped:9}}