R按字母顺序(对于字符串)或级别顺序(对于因子)确定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
成为有序因子之外,还有其他解决方案吗?
答案 0 :(得分:4)
明确设置striptext
的级别并将其存储为一个因子,这样格子就不必为你做强制(这是级别以alpha顺序结束的地方):
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)