首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >求行组的IQR

求行组的IQR
EN

Stack Overflow用户
提问于 2014-12-01 14:27:30
回答 2查看 5K关注 0票数 4

我想在dataframe中找到一系列值的IQR。这些值也是分组的,因此我需要在dataframe中找到每个组的IQR。我有下表:

代码语言:javascript
复制
 Block DNAname  Spot_Size   Molarity    Cy3_Fluorescence
 1  DNA 01  100pl   100 14266
 1  DNA 01  100pl   100 16020
 1  DNA 01  100pl   100 15705
 1  DNA 01  100pl   100 15783
 1  DNA 01  100pl   100 15834
 1  DNA 01  100pl   50  12248
 1  DNA 01  100pl   50  12209
 1  DNA 01  100pl   50  12511
 1  DNA 01  100pl   50  12316
 1  DNA 01  100pl   50  12469
 1  DNA 01  100pl   25  9626
 1  DNA 01  100pl   25  9804
 1  DNA 01  100pl   25  9794
 1  DNA 01  100pl   25  10020
 1  DNA 01  100pl   25  9739
 1  DNA 01  100pl   10  7158
 1  DNA 01  100pl   10  6802
 1  DNA 01  100pl   10  7378
 1   DNA 01 100pl   10  5949
 1  DNA 01  100pl   10  7484
 1  DNA 01  100pl   5   5257
 1  DNA 01  100pl   5   5560
 1  DNA 01  100pl   5   6076
 1  DNA 01  100pl   5   5925

我运行以下代码来查找IQR:

代码语言:javascript
复制
aggregate(Cy3.DNA1.100pl.1uM$Cy3_Fluorescence, list(Molarity=
    Cy3.DNA1.100pl.1uM$Molarity, Spot_Size=Cy3.DNA1.100pl.1uM$Spot_Size ), IQR)

这给了我一个输出:

代码语言:javascript
复制
   Molarity  Spot_Size   x
      5     100pl    384
     10     100pl    576
     25     100pl     65
     50     100pl    221
    100     100pl    129

此输出分组所有的磨擦正确,但IQR是不正确的。如果上面的代码将平均值作为函数而不是IQR,则x的值(函数值)是正确的:

代码语言:javascript
复制
   Molarity Spot_Size       x
    5     100pl       5752.4
   10     100pl       6954.2
   25     100pl       9796.6
   50     100pl      12350.6
  100     100pl      15521.6

预期的IQRS应如下:

代码语言:javascript
复制
Molarity IQR
100      324.25
50       258
25       363
10       519.5
5        400

任何帮助都将不胜感激。如果有人知道我如何为IQR执行这个函数,那么当有一组spot大小( spot大小范围为100pl-400pl)时,包括我想要听到的流度类别,我想听听它们。

非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-01 21:03:55

还不清楚您的问题是关于聚合,还是关于您的(??)IQR的定义。计算IQR的方法很多(参见)。据我所知,他们中没有一个在你的帖子中给出结果。

关于根据光斑大小和摩尔度进行聚合的方法,这里有两种方法:

代码语言:javascript
复制
# use aggregate(...) in base R - will be slow with large datasets
aggregate(Cy3_Fluorescence~Molarity+Spot_Size,df,IQR)
#   Molarity Spot_Size Cy3_Fluorescence
# 1        5     100pl            478.5
# 2       10     100pl            576.0
# 3       25     100pl             65.0
# 4       50     100pl            221.0
# 5      100     100pl            129.0

# use data.table - will be extremely fast.
library(data.table)
setDT(df)[,list(IQR=IQR(Cy3_Fluorescence)),by=list(Molarity,Spot_Size)]
#    Molarity Spot_Size   IQR
# 1:      100     100pl 129.0
# 2:       50     100pl 221.0
# 3:       25     100pl  65.0
# 4:       10     100pl 576.0
# 5:        5     100pl 478.5
票数 4
EN

Stack Overflow用户

发布于 2022-10-06 13:42:52

我知道这是个旧帖子,但我今天遇到了这个问题,更容易解决:

代码语言:javascript
复制
library(tidyverse)
#get IQR
a <- df %>% group_by(Spot_Size) %>% group_by(Molarity) %>% summarise(IQR(Cy3_Fluorescence))
a <- data.frame(a)
a
#  Molarity IQR.Cy3_Fluorescence.
#        5                 478.5
#       10                 576.0
#       25                  65.0
#       50                 221.0
#      100                 129.0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27230500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档