我有一个数据框:
df<-data.frame(P = c("A","A","A", "B","B","B", "C", "C", "C"), index = c("ind1","ind2","ind3","ind1","ind2","ind3","ind1","ind2","ind3"), var = c(2,1,1,8,5,4,2,8,6))
我想获得每个值的所有最小值S var
和它们的相关index
值P
.我可以做这个:
DT <- data.table(df) DT[ ,.SD[which.min(var)], by = P]
它只给出一个最小值var
(第一个)P
:
P index var 1: A ind2 1 2: B ind3 4 3: C ind1 2
而且我想:
P index var 1: A ind2 1 2: A ind3 1 2: B ind3 4 3: C ind1 2
想法?
使用dplyr,您可以使用以下之一:
library(dplyr) DT %>% group_by(P) %>% filter(var == min(var)) # or %in% instead of == #Source: local data table [4 x 3] #Groups: P # # P index var # (fctr) (fctr) (dbl) #1 A ind2 1 #2 A ind3 1 #3 B ind3 4 #4 C ind1 2
要么
DT %>% group_by(P) %>% top_n(1, desc(var)) # top_n() returns multiple rows in case of ties #Source: local data table [4 x 3] #Groups: P # # P index var # (fctr) (fctr) (dbl) #1 A ind2 1 #2 A ind3 1 #3 B ind3 4 #4 C ind1 2
要么
DT %>% group_by(P) %>% filter(min_rank(var) == 1) #Source: local data table [4 x 3] #Groups: P # # P index var # (fctr) (fctr) (dbl) #1 A ind2 1 #2 A ind3 1 #3 B ind3 4 #4 C ind1 2