【发布时间】:2019-08-21 19:35:19
【问题描述】:
我有一个数据集,其中每一行代表一个订单,其中包含多个项目和为每个项目订购的数量。 我想知道数量最多的每一行的项目名称和数量。
我的数据如下所示:
Item1 Qty1 Item2 Qty2 Item3 Qty3 Item4 Qty4
SUV1 4 SUV2 5 SUV3 5 SUV4 3
SUV4 7 PLV4 3 PNC5 6 NA NA
SUV3 5 PNC3 5 NA NA NA NA
当我尝试以下代码时,我能够获得每行中具有最高值的列名,但不是项目名称:
##
library(tidyverse)
sodf_rank<- sodf2 %>%
rownames_to_column('id') %>% # creates an ID number
gather(dept, cnt, SKU1_Qty:SKU10_Qty) %>%
group_by(id) %>%
slice(which.max(cnt))
##
我希望得到如下结果:
RowID Item Qty
1 SUV2 5
2 SUV4 7
3 SUV3 5
【问题讨论】:
-
按ID分组后,您可以
arrange(cnt)从高到低然后slice(1)每个ID的最高值,这将返回三个所需的列。 -
在基础 R 中你可以做
merge(b<-reshape(df,1:ncol(df),dir="long",sep=""),aggregate(Qty~id,b,max)).