首页 > 解决方案 > 仅包含在 R 中第 1 和第 3 个四分位数之间的数据的平均值

问题描述

我有不同效果的浓度值,我一直在尝试计算每组分组数据的平均值(通过不同的效果),但仅适用于箱线图的第一和第三四分位数之间包含的数据,使用 R .我先做了箱线图(用ggplot),但我不明白这有什么帮助。使用函数 ggplot_build(),我只得到四分位数。我也试过“aggregate()”,但这提供了整个集合的平均值,我不想包括第一个和第三个四分位数之外的内容。有任何想法吗?谢谢你的帮助。

 conc.value Conc.units Effect.group           Effect
1    0.000160000    AI mg/L    systemic        Physiology
2    0.000560000    AI mg/L    systemic        Population
3    0.001090377    AI mg/L    systemic        Population
4    0.001124100    AI mg/L   cell-based        Enzyme(s)
5    0.001686150    AI mg/L    systemic        Population
6    0.002000000    AI mg/L    systemic        Population
7    0.002000000    AI mg/L    systemic        Population
8    0.002000000    AI mg/L    systemic        Population
9    0.002248200    AI mg/L   cell-based        Enzyme(s)
10   0.002248200    AI mg/L   cell-based        Enzyme(s)
11   0.002248200    AI mg/L    systemic        Population
12   0.002248200    AI mg/L   cell-based     Biochemistry
13   0.004000000    AI mg/L    systemic        Population
14   0.004000000    AI mg/L    systemic        Population
15   0.004496400    AI mg/L   cell-based     Biochemistry
16   0.004496400    AI mg/L   cell-based        Enzyme(s)
17   0.004496400    AI mg/L    systemic        Population
18   0.005000000    AI mg/L    systemic        Population
19   0.005000000    AI mg/L    systemic        Population
20   0.005000000    AI mg/L    systemic        Population
21   0.005000000    AI mg/L    systemic        Population
22   0.005000000    AI mg/L    systemic        Population
23   0.005000000    AI mg/L    systemic        Population
24   0.005000000    AI mg/L    systemic        Population
25   0.005000000    AI mg/L    systemic        Population
26   0.005000000    AI mg/L    systemic        Population

标签: rmean

解决方案


您可以访问箱线图中包含的统计信息。以下是一些说明性数据:

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中如何解决问题的方法。由于您似乎有一个比这更复杂的数据框,因此该解决方案显然必须适应您的数据。如果您需要这方面的帮助,您需要展示数据的样子。

例如,如果您有一个包含多个数值变量的数据框,您可以像这样一次性进行计算:

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,您可以一次性完成:

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

推荐阅读