如何选择r中每组最低数量

  • 本文关键字:何选择 选择 r
  • 更新时间 :
  • 英文 :

rn=c(3,4,5,2,1,5,6,8,10,3,4,5,6,8,9,7)
na=c("A","A","A","A","A","B","B","B","B","B","CD","CD","CD","CD","CD","CD")
mo=c("ram","okd","mlu","lom","mpl","mpl","cdd","jjh","yyt","uu","tt","rre","llm","mm","mlp","lok")
dat=cbind(rn,na,mo)

我需要为na中的每个组选择rn中最小的数

示例输出:

"1"  "A"  "mpl"
"3"  "B"  "uu" 
"4"  "CD" "tt" 

我们可以在分组后使用slice_min(假设'dat'是data.frame而不是matrix) -cbind默认返回matrix,而不是直接使用data.frame

library(dplyr)
dat %>% 
group_by(na) %>%
slice_min(n = 1, order_by = rn) %>%
ungroup

与产出

# A tibble: 3 × 3
rn na    mo   
<dbl> <chr> <chr>
1     1 A     mpl  
2     3 B     uu   
3     4 CD    tt   

数据
dat <- data.frame(rn, na, mo)

base Roption:

rn=c(3,4,5,2,1,5,6,8,10,3,4,5,6,8,9,7)
na=c("A","A","A","A","A","B","B","B","B","B","CD","CD","CD","CD","CD","CD")
mo=c("ram","okd","mlu","lom","mpl","mpl","cdd","jjh","yyt","uu","tt","rre","llm","mm","mlp","lok")
dat=data.frame(rn,na,mo)
dat[dat$rn==ave(dat$rn, dat$na, FUN=min),]
#>    rn na  mo
#> 5   1  A mpl
#> 10  3  B  uu
#> 11  4 CD  tt

由reprex包(v2.0.1)创建于2022-07-06

基本R解:

do.call(rbind,lapply(split.data.frame(dat, dat$na), function(x) x[which.min(x$rn),]))
rn na  mo
A   1  A mpl
B   3  B  uu
CD  4 CD  tt

在创建了data.frame

之后,我们甚至可以使用一个简单的filter

来做到这一点

dat=data.frame(rn,na,mo)
<<p>程序/strong>
library(dplyr)
dat %>%
group_by(na) %>%
filter(rn==min(rn)) %>%
ungroup()

# A tibble: 3 x 3
rn na    mo   
<dbl> <chr> <chr>
1     1 A     mpl  
2     3 B     uu   
3     4 CD    tt 

最新更新