将因子水平的段打印到 base R 中的带状图中

Print segments for factor levels into stripchart in base R

我有一个带有数值变量和因子变量的数据框,如下所示:

set.seed(123)
df <- data.frame(
  numbers = c(rnorm(50, 3), runif(50)),
  levels = sample(LETTERS[1:5], 100, replace = T)
)

我想要做的是绘制 df$numbersdf$levels 的带状图插入代表每个级别平均值的垂直线段。

stripchart(df$numbers ~ df$levels, method = "jitter")

显然,我可以分别为每个级别插入平均值线,例如:

segments(x0 = mean(df$numbers[df$levels=="A"]), y0 = 1-0.3, y1 = 1+0.3, col = "red" )

以此类推所有其他级别,如果您有多个级别,这将很乏味。所以我试过这个 forloop:

for(i in seq(unique(df$levels))){
  segments(x0 = mean(df$numbers[df$levels==i]),
           y0 = i - 0.3,
           y1 = i + 0.3,
           col = "red", lty = 3, lwd = 2)
}

但这不会打印任何内容(也不会引发错误)。插入均值段的最干净、最简单的代码是什么?

由于 'levels' 列是 factor,使用 levels 得到 factor 'un1' 的水平,然后遍历唯一序列元素,获取 'numbers' 的 mean,其中 levels 列是创建 segments

的唯一值
un1 <- levels(df$levels)
for(i in seq_along(un1)){
 segments(x0 = mean(df$numbers[df$levels==un1[i]]),
       y0 = i - 0.3,
       y1 = i + 0.3,
       col = "red", lty = 3, lwd = 2)
}

-检查 mean

with(df, tapply(numbers, levels, FUN = mean))
#      A        B        C        D        E 
#1.390202 1.541655 2.086605 2.377122 1.663159