在r中找到每个类别的数据帧中的最高值

时间:2017-07-24 13:33:25

标签: r

我有一个包含3列的数据框:类别,品牌和特定类别中每个品牌的订单总数:

  X2            X1        total.count
Accessories    3MT          2098
Accessories    A82          1834
Accessories    A14           109
Tops           A79            87
Tops           A74           435

我有150个不同的类别和1700个不同的品牌。

我想创建一个数据框,其中包含该类别中最有序的品牌,以及该品牌的订单数量。到目前为止,我使用子集来检索每个类别中的顶级品牌,但我只想知道如何逐个进行:

b1 <- subset (DF, X2 == "Accessories")
b1$total.count<- sort(b1$total.count, decreasing = TRUE)

从那里我走了第一排:

s1 = head(b1, n=1)

我必须为每个类别执行此操作,然后将它们全部绑定到一个数据框中:

topbrands = data.frame(rbind(head(b1,n = 
1),head(b2,n=1),head(b3,n=1),head(b4, n=1),head(b5,n=1)....

直到b150。 是否有更时尚或更有效的方法来做到这一点?

2 个答案:

答案 0 :(得分:2)

这是你在找什么?

dplyr

library(dplyr)
df %>% group_by(X2) %>% filter(total.count==max(total.count)) %>% as.data.frame

或者使用data.table:

dt = data.table(df)
dt[ , .SD[which.max(total.count)], by = X2]

输出:

           X2  X1 total.count
1 Accessories 3MT        2098
2        Tops A74         435

答案 1 :(得分:1)

do.call(rbind, lapply(split(df,df$X2), function(x) {return(x[which.max(x$total.count),])}))

检查这是否有帮助!