Распечатайте сегменты для уровней факторов в полосовую диаграмму в базе R - PullRequest
1 голос
/ 04 ноября 2019

У меня есть фрейм данных с числовой переменной и факторной переменной, например:

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

Я хотел бы сделать полосовую диаграмму, которая отображает df$numbers против df$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" )

И так далее для всех других уровней, что утомительно, если у вас несколько уровней. Итак, я попробовал этот цикл for:

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)
}

Но это ничего не печатает (и тоже не выдает ошибку). Какой самый простой и понятный код для вставки сегментов средних?

1 Ответ

1 голос
/ 04 ноября 2019

Поскольку в столбце «уровни» указано factor, используйте levels, чтобы получить уровни factor «un1», затем выполните цикл по последовательности уникальных элементов, чтобы получить 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)
}

enter image description here

- проверки mean

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