查找每个组的最大值

时间:2018-05-30 19:30:06

标签: r

我想创建一个数据子集并根据其最大值收集数据: 这是代码:

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

有什么建议我可以使用什么功能来解决它​​?

2 个答案:

答案 0 :(得分: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

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

> 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

答案 1 :(得分:1)

使用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-05-30。