我在RStudio中使用tapply()对我的数据进行总结和重组,以便根据https://www.r-bloggers.com/building-barplots-with-error-bars/制作更好的图表。代码工作正常,见下文,除了它按字母顺序重新组织我的因素,这导致恼人的组织情节。正如你在这里看到的:
因子按字母顺序排列,但我更喜欢将控件作为每组中的最后一个条。有没有办法阻止这种重组?
如果您要重现此问题,上面的链接提供了一个可重复的示例,其中包含完全相同的问题。这是我正在使用的代码。请注意,上面显示的图像有一些简单的东西。
OCCtabbedMeans <- tapply(occdata2$mean, list(occdata2$dist3,
occdata2$Dispersal_window),
function(x) c(x = x))
OCCtabbedSE <- tapply(occdata2$se, list(occdata2$dist3,
occdata2$Dispersal_window),
function(x) c(x = x))
OCCbarCenters <- barplot(height = OCCtabbedMeans,
beside = TRUE, las = 1,
ylim = c(0, 1),
cex.names = 0.75,
main = NULL,
xaxt="n",
ylab = "y",
xlab = "x",
border = "black", axes = TRUE,
legend.text = TRUE,
args.legend = list(title = NULL,
x = "topleft",
cex = .7))
mtext(side=1,cex=0.75,"Low",adj=0.15)
mtext(side=1,cex=0.75,"High",adj=0.89)
segments(OCCbarCenters, OCCtabbedMeans - OCCtabbedSE * 2, OCCbarCenters,
OCCtabbedMeans + OCCtabbedSE * 2, lwd = 1.5)
arrows(OCCbarCenters, OCCtabbedMeans - OCCtabbedSE * 2, OCCbarCenters,
OCCtabbedMeans + OCCtabbedSE * 2, lwd = 1.5, angle = 90,
code = 3, length = 0.05)
****编辑****这个问题被标记为一个问题的副本,询问如何按字母顺序重新排序一个因子,这与我试图做的相反。
答案 0 :(得分:1)
您可以在levels=
调用中使用factor()
参数将因子级别的顺序设置为您希望它们的任何值。例如,
# some fake data
x <- factor(sample(letters[1:3],15,replace=T))
y <- rnorm(15)
tapply(y, x, mean)
# a b c
# -0.8467318 0.1967837 0.2303459
# changing the order with the levels= argument...
x <- factor(x, levels=c("b","c","a"))
# changes the order in the tapply call
tapply(y, x, mean)
# b c a
# 0.1967837 0.2303459 -0.8467318
您还可以重新排列tapply()
调用...
xxx <- tapply(y, x, mean)
xxx
# b c a
# 0.1967837 0.2303459 -0.8467318
xxx[c(3,2,1)]
# a c b
# -0.8467318 0.2303459 0.1967837