【问题标题】:Finding the max value out of each group [duplicate]从每组中找出最大值[重复]
【发布时间】:2018-05-30 19:30:05
【问题描述】:

我想创建一个数据子集并根据它们的最大值收集数据: 代码如下:

mat=matrix(c(0,0,0,1,2,3,4,5,0,0,0,0), ncol=1)
mat=as.data.frame(mat)
colnames(mat) <- sub("V1", "value", colnames(mat))
gr=matrix(c(1,2,2,2,2,3,4,4,4,5,5,5), ncol=1)
gr=as.data.frame(gr)
colnames(gr) <- sub("V1", "group", colnames(gr))
df=as.data.frame(cbind(mat, gr))
data = subset(df, value == max(value))

所以我创建了一个数据框df,如下所示:

      value group
1      0     1
2      0     2
3      0     2
4      1     2
5      2     2
6      3     3
7      4     4
8      5     4
9      0     4
10     0     5
11     0     5
12     0     5

所以我想根据最大值收集一个子数据帧中的数据,例如

  • 对于第 1 组,最大值为 0。
  • 对于第 2 组,最大值为 2
  • 对于第 3 组,最大值为 3 等等。

那么结果应该是:

    value group
1      0     1
5      2     2
6      3     3
8      5     4
12     0     5

我得到的是subset(df, value == max(value))

  value group
8     5     4

关于我可以使用什么函数来解决它的任何建议?

【问题讨论】:

  • 查看R-FAQ for finding mean by group,但只需使用max 而不是mean。 Base R、dplyr、data.table 等中有很多方法。最好的基本 R 版本可能是aggregate(value ~ group, df, max)

标签: r


【解决方案1】:

这是aggregate的解决方案:

> aggregate(df$value, list(df$group), FUN = max)
  Group.1 x
1       1 0
2       2 2
3       3 3
4       4 5
5       5 0

同样,您可以使用doBy 包中的summaryBy 函数,如下所示:

> require(doBy)
> summaryBy(value ~ group, data = df, FUN = max)
  group value.max
1     1         0
2     2         2
3     3         3
4     4         5
5     5         0

【讨论】:

    【解决方案2】:

    使用dplyr,以及一种更简洁的方式来创建您的df

    df <- data.frame(
      value = c(0,0,0,1,2,3,4,5,0,0,0,0),
      group = c(1,2,2,2,2,3,4,4,4,5,5,5)
    )
    
    library(dplyr)
    df %>% 
      group_by(group) %>% 
      summarize(max.value = max(value))
    #> # A tibble: 5 x 2
    #>   group max.value
    #>   <dbl>     <dbl>
    #> 1     1         0
    #> 2     2         2
    #> 3     3         3
    #> 4     4         5
    #> 5     5         0
    

    reprex package (v0.2.0) 于 2018 年 5 月 30 日创建。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-12
      • 2015-05-01
      • 2020-11-01
      • 1970-01-01
      • 2015-11-26
      • 2011-02-09
      • 2020-07-29
      相关资源
      最近更新 更多