【问题标题】:How can you get all the minimum values of a variable by group?如何按组获取变量的所有最小值?
【发布时间】:2016-03-30 01:56:32
【问题描述】:

我有一个数据框:

df<-data.frame(P = c("A","A","A", "B","B","B", "C", "C", "C"), 
               index = c("ind1","ind2","ind3","ind1","ind2","ind3","ind1","ind2","ind3"),
               var = c(2,1,1,8,5,4,2,8,6))

我想为每个P 的值获取var 的所有最小值及其关联的index。 我可以这样做:

DT <- data.table(df)
DT[  ,.SD[which.min(var)], by = P]

它仅给出P 的一个最小值var(第一个):

   P index  var
1: A  ind2   1
2: B  ind3   4
3: C  ind1   2

我想:

   P index  var
1: A  ind2   1
2: A  ind3   1
2: B  ind3   4
3: C  ind1   2

想法?

【问题讨论】:

  • 据我了解,您需要索引和 P 的每个唯一配对的最小值......但是,您想要的输出如何对 P == 'A' 有两个观察值?然而,与此同时,根据同样的规则,您只能对“B”和“C”的 P 值进行独特的观察。
  • stackoverflow.com/questions/6289538/… 这应该会有所帮助

标签: r data.table minimum


【解决方案1】:

使用 dplyr,您可以使用以下方法之一:

library(dplyr)
DT %>% group_by(P) %>% filter(var == min(var))  # or %in% instead of ==
#Source: local data table [4 x 3]
#Groups: P
#
#       P  index   var
#  (fctr) (fctr) (dbl)
#1      A   ind2     1
#2      A   ind3     1
#3      B   ind3     4
#4      C   ind1     2

或者

DT %>% group_by(P) %>% top_n(1, desc(var)) # top_n() returns multiple rows in case of ties
#Source: local data table [4 x 3]
#Groups: P
#
#       P  index   var
#  (fctr) (fctr) (dbl)
#1      A   ind2     1
#2      A   ind3     1
#3      B   ind3     4
#4      C   ind1     2

或者

DT %>% group_by(P) %>% filter(min_rank(var) == 1)
#Source: local data table [4 x 3]
#Groups: P
#
#       P  index   var
#  (fctr) (fctr) (dbl)
#1      A   ind2     1
#2      A   ind3     1
#3      B   ind3     4
#4      C   ind1     2

【讨论】:

    【解决方案2】:

    which.min 的帮助页面中,您会注意到上面写着:

    确定位置,即数字(或逻辑)向量的(第一个)最小值或最大值的索引。

    如果您想要所有与最小值匹配的值,您应该尝试使用==。因此,继续您的方法,尝试:

    DT[, .SD[var == min(var)], by = P]
    ##    P index var
    ## 1: A  ind2   1
    ## 2: A  ind3   1
    ## 3: B  ind3   4
    ## 4: C  ind1   2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      相关资源
      最近更新 更多