R 如何根据变量C上的条件,通过变量a分组以从变量B获得最小值

R 如何根据变量C上的条件,通过变量a分组以从变量B获得最小值,r,plyr,R,Plyr,我有3个变量a,B,C的数据。我需要在a上分组,当C为非零时,需要最小值B > data A B C 1 a 3 0 2 a 6 1 3 a 9 2 4 a 12 2 5 b 3 0 6 b 6 0 7 b 9 0 8 b 12

我有3个变量a,B,C的数据。我需要在a上分组,当C为非零时,需要最小值B

> data
     A       B       C
1    a       3       0
2    a       6       1
3    a       9       2
4    a       12      2
5    b       3       0
6    b       6       0
7    b       9       0
8    b       12      4
预期产出:

> output
     1       2
1    a       6       
2    b       12       
我试着这样做,运行了2个多小时:

rbind(by(data, data$A, function(x) min(x$B[x$C>0])))

我们按“A”分组,得到“B”的
min
,其中“C”不是0

library(dplyr)
df1 %>% 
   group_by(A) %>% 
   summarise(B = min(B[C > 0]))
# A tibble: 2 x 2
#  A         B
#   <chr> <int>
#1 a         6
#2 b        12

或使用
数据。表格

library(data.table)
setDT(df1)[,.(B = min(B[C > 0])) , A]
数据
df1
aggregate(B~A,df[df$C!=0,],min)
library(data.table)
setDT(df1)[,.(B = min(B[C > 0])) , A]
df1 <- structure(list(A = c("a", "a", "a", "a", "b", "b", "b", "b"), 
B = c(3L, 6L, 9L, 12L, 3L, 6L, 9L, 12L), C = c(0L, 1L, 2L, 
2L, 0L, 0L, 0L, 4L)), class = "data.frame", row.names = c("1", 
 "2", "3", "4", "5", "6", "7", "8"))