我有一个包含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。 是否有更时尚或更有效的方法来做到这一点?
答案 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),])}))
检查这是否有帮助!