如何将组均值与单个观察值进行比较并创建新的 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.Data
与Quantiles.Data
映射?它们之间有一些共同的列吗?您可以使用dput
即dput(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 列?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ggplot2 boxplot 中为每组添加多个观察值并使用组平均值?