r - 仅包含在 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
解决方案
您可以访问箱线图中包含的统计信息。以下是一些说明性数据:
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
推荐阅读
- sql - 过程中带值的动态参数列表
- c# - 通过 File() 返回 Stream 会导致未来的操作抛出“进程无法访问文件路径,因为它正在被另一个进程使用”
- python - PyMC3 中具有非分析时间相关参数的 ODE
- php - 如何添加请求超时?
- cuda - 如何替换已弃用的 tex2D(texture
, 浮动, 浮动) [with T=float]? - sqlite - 即使对于 PRAGMA integriti_check,Sqlite 文件也不是数据库
- python - 如何缩放火花数据框中的数据子集
- javascript - 访问未触及的窗口对象
- r - R中是否有聚类算法可以根据曲线形状对时间序列图进行分组?
- function - 未定义的变量和函数