2011-02-01 45 views
3

R按字母順序(對於字符串)或水平順序(對於因素)確定xyplot()中的面板順序。我有日期作爲文本,我想按時間順序顯示,而不是按字母順序顯示。如何控制xyplot()中的面板順序?

x <- sample(1:10, 10, replace = TRUE) 
y <- sample(1:10, 10, replace = TRUE) 
# overlapping 2010 and 2011 
date <- rep(as.Date("2010-01-01") + sort(sample(200:400, 5)), each = 2) 
striptext <- format(date, "%d-%b ...") 
df <- data.frame(x, y, date, striptext) 

這工作得很好:

xyplot(y ~ x | date, data = df) 

但是,這把日期亂序:

xyplot(y ~ x | striptext, data = df) 

我不想條完整的日期,但我確實希望他們按正確的順序。除了使striptext爲有序因子之外,還有解決方案嗎?

+1

主點我認爲你缺少的是`striptext`被強制轉化爲`xyplot`內的一個因素,並且如果沒有提供`levels`,所得因子的級別按照字母順序排列。考慮'levels(factor(striptext))`和`levels(factor(striptext,levels = unique(striptext)))`。對你的問題的真正答案是首先將你的條件變量設置爲按照你想要的方式排列的一個因子。 – 2011-02-01 22:30:47

回答

4

設置的striptext明確的等級,並存儲爲一個因素,使晶格不必爲你做的脅迫(這哪裏是水平字母順序結束):

set.seed(1) 
x <- sample(1:10, 10, replace = TRUE) 
y <- sample(1:10, 10, replace = TRUE) 
# overlapping 2010 and 2011 
date <- rep(as.Date("2010-01-01") + sort(sample(200:400, 5)), each = 2) 
striptext <- format(date, "%d-%b ...") 
## set the levels explicitly 
df <- data.frame(x, y, date, 
       striptext = factor(striptext, levels = unique(striptext))) 
xyplot(y ~ x | striptext, data = df) 
+0

就是這樣。默認情況下,`factor`會對這些關卡進行排序,但是`unique`會以發現的順序離開它們。 – 2011-02-02 00:35:21