我想创建一个数据子集并根据其最大值收集数据: 这是代码:
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
所以我想根据最大值收集子集数据帧中的数据,例如
结果应该是:
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
有什么建议我可以使用什么功能来解决它?
答案 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。