R语言统计商品对应日期数据点数量并生成TopN排名的实现方法
统计商品在售日期排名的R实现方案
你可以根据自己的使用习惯选择以下两种实现方式,2000个商品的数据集下两种方法的运行效率都足够,不会有性能问题。
方法1:tidyverse(dplyr)实现(更易读,推荐)
# 加载依赖包,未安装的话先运行 install.packages("tidyverse") library(dplyr) # 核心统计逻辑 rank_df <- df %>% # 按商品编号分组 group_by(ArticleNr) %>% # 统计在售日期数,因无同商品同日期重复记录,直接统计行数即可;如果后续出现重复可替换为n_distinct(created) summarise(soldOnDates = n(), .groups = "drop") %>% # 按在售日期数降序排序 arrange(desc(soldOnDates)) %>% # 生成排名,默认并列排名取最小位次,需要连续排名可替换为dense_rank() mutate(Rank = min_rank(desc(soldOnDates))) %>% # 调整列顺序匹配你需要的输出格式 select(Rank, ArticleNr, soldOnDates) # 筛选不同档位排名示例 top3_df <- rank_df %>% filter(Rank <= 3) top10_df <- rank_df %>% filter(Rank <= 10) top25_df <- rank_df %>% filter(Rank <= 25)
运行上述代码后输出的rank_df就完全匹配你给出的样例输出格式。
方法2:base R实现(无需额外安装包)
# 统计每个商品的在售日期数 count_df <- aggregate(created ~ ArticleNr, df, length) # 重命名列 colnames(count_df)[2] <- "soldOnDates" # 按在售日期数降序排序 count_df <- count_df[order(-count_df$soldOnDates), ] # 生成排名列 count_df$Rank <- rank(-count_df$soldOnDates, ties.method = "min") # 调整列顺序 rank_df <- count_df[, c("Rank", "ArticleNr", "soldOnDates")] # 筛选Top3示例 top3_df <- rank_df[rank_df$Rank <=3, ]
注意:如果你的数据集里日期列名为
soldDate,把上述代码里的created替换为soldDate即可。
内容的提问来源于stack exchange,提问作者Pa_Syl
相关产品推荐
相关产品推荐

