Вы можете получить доступ к статистике, включенной в коробочные сюжеты. Вот некоторые иллюстративные данные:
set.seed(123)
df <- data.frame(
V1 = c(rnorm(100))
)
Теперь сохраните коробочную диаграмму вашего столбца V1
как объект, называемый здесь, ну, object
:
object <- boxplot(df$V1)
Внутренняя проверка статистики связано с object
:
object$stats
[,1]
[1,] -1.96661716
[2,] -0.49667731
[3,] 0.06175631
[4,] 0.69499808
[5,] 2.18733299
2-е и 4-е значения разграничивают IQR (для проверки вы можете сделать summary(df)
). Поэтому следующим шагом будет подмножество df$V1
на этих двух значениях и вычисление среднего значения:
mean(df$V1 >= object$stats[2] & df$V1 <= object$stats[4])
[1] 0.5
Это в nuce , как вы можете решить вопрос. Поскольку кажется, что у вас более сложная структура данных, это решение, очевидно, придется адаптировать к вашим данным. Если вам нужна помощь в этом, вам нужно показать, как выглядят данные.
Например, если у вас есть фрейм данных с несколькими числовыми переменными, вы можете выполнить вычисления в одном go, например так:
set.seed(123)
df <- data.frame(
V1 = c(rnorm(100)),
V2 = c(rnorm(100, 1)),
V3 = c(rnorm(100, 2))
)
lapply(df[,1:3], function(x) mean(x >= object$stats[2] & x <= object$stats[4]))
$V1
[1] 0.5
$V2
[1] 0.39
$V3
[1] 0.07
РЕДАКТИРОВАТЬ :
Для набора данных, такого как тот, который вы описали в своем недавнем комментарии, решение может быть следующим:
set.seed(123)
df <- data.frame(
V1 = c(rnorm(100)),
Effect = sample(LETTERS[1:4], 100, replace = T)
)
Чтобы рассчитать среднее значение для межквартильного диапазона на Effect
, вы можете сделать это за один go:
tapply(df$V1, df$Effect, function(x) mean(x[x >= quantile(x, 0.25) & x <= quantile(x, 0.75)]))
A B C D
0.005502653 0.251196882 0.077304685 -0.108590409