如何将组均值与单个观察值进行比较并创建新的 TRUE/FALSE 列?

Posted

技术标签:

【中文标题】如何将组均值与单个观察值进行比较并创建新的 TRUE/FALSE 列?【英文标题】:How do I compare group means to individual observations and make a new TRUE/FALSE column? 【发布时间】:2020-08-07 11:24:41 【问题描述】:

我是 R 新手,这是我在 SO 上的第一篇文章 - 所以请多多包涵。

我正在尝试识别数据集中的异常值。我有两个 data.frames:

(1 - 原始数据集,192 行):观察值及其值(AvgConc)

(2 - 使用 dplyr 创建,24 行):来自原始数据集的分组平均值,以及分位数、最小值和最大值

我想在原始数据集中创建一个新列,根据 (AvgConc) 是大于最大值还是小于我在第二个 data.frame 中计算的最小值给出 TRUE/FALSE。我该怎么做?

尝试失败:

Outliers <- Original.Data %>%
 group_by(Status, Stim, Treatment) %>%
 mutate(Outlier = Original.Data$AvgConc > Quantiles.Data$Maximum | Original.Data$AvgConc <  Quantiles.Data$Minimum) %>%
 as.data.frame()

错误:列 Outlier 的长度必须为 8(组大小)或 1,而不是 192

【问题讨论】:

如何将Original.DataQuantiles.Data 映射?它们之间有一些共同的列吗?您可以使用dputdput(head(Quantiles.Data))dput(head(Original.Data)) 共享两个数据集的前几行。 【参考方案1】:

在这里,我们需要通过与 'Original.Data' by 'Status'、'Stim'、'Treatment' 进行连接来删除 Quantiles.Data$

library(dplyr)
Original.Data %>%
   inner_join(Quantiles.Data %>% 
              select(Status, Stim, Treatment, Maximum, Minimum)) %>%
   group_by(Status, Stim, Treatment) %>%
   mutate(Outlier = (AvgConc > Maximum) |(AvgConc <  Minimum)) %>%
   as.data.frame()

【讨论】:

试一试,遇到了这个错误:选择错误(。,状态,刺激,治疗,最大值,最小值):未使用的参数(状态,刺激,治疗,最大值,最小值)跨度> @iastatecy you havent' 展示了任何示例,所以这只是基于我的直觉,可能会有这些列。如果您可以使用一些简单的示例和预期的输出来更新您的帖子,那么调试会更容易 意识到我不需要 group_by 行,因此连接部分可以正常工作并且列标记正确,但是当我到达 mutate 行时,我收到此错误: mutate 中的错误(Outlier = ( AvgConc > 最大值)|(AvgConc @iastatecy 在您的代码中,有Original.Data$AvgConc,因此不清楚数据中不存在该列的情况下如何获得该列名。请检查colnames(Original.Data) AvgConc 列在原始数据中。我尝试了 inner_join 并且能够让它工作!

以上是关于如何将组均值与单个观察值进行比较并创建新的 TRUE/FALSE 列?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Matlab中将每个矩阵与平均值和返回值进行比较

将组平均值分配给 python/pandas 中的每一行

如何在 ggplot2 boxplot 中为每组添加多个观察值并使用组平均值?

将组平均值分配给python / pandas中的每一行

R - 如何制作 n 个先前值的平均值/平均值,不包括当前观察值(滚动平均值)

当列值更改时,如何将组号添加到 SQL Server 2012 中的顺序记录?