R 如何根据列表列的元素获取行数?
我有一个包含两列的数据集。一个是客户ID,另一个是购买的产品列表。数据按ID排序。每行代表一个事务。我必须拿出交易数量最多的前20种产品 因此,数据可能如下所示: ID |产品清单 1 | 92 2 | 88 2 | 88,89 2 | 88,91,90 3 | 130、88、90、92 3 | 130、88、90、92 3 | 130、88、91 3 | 130,88 3 | 130,88 我需要获得购买频率最高的前5种产品。产品ID不会在列表中重复 我想避免使用for循环,而这正是我现在的困境所在 因此,我的输出是: Txns产品编号 88 | 8 130 | 5 90 | 3 92 | 3 91 | 2 抱歉,我不知道如何在这个问题上设置表格。我使用for循环完成了这项工作,通过将每个列表取消列出到一组列中,然后对整个列表进行计数,但这似乎是一种非常低效的编码方式。我不太清楚如何处理列由列表组成的数据,理想情况下,我希望将这样的操作矢量化。这将有助于:R 如何根据列表列的元素获取行数?,r,list,dataframe,R,List,Dataframe,我有一个包含两列的数据集。一个是客户ID,另一个是购买的产品列表。数据按ID排序。每行代表一个事务。我必须拿出交易数量最多的前20种产品 因此,数据可能如下所示: ID |产品清单 1 | 92 2 | 88 2 | 88,89 2 | 88,91,90 3 | 130、88、90、92 3 | 130、88、90、92 3 | 130、88、91 3 | 130,88 3 | 130,88 我需要获得购买频率最高的前5种产品。产品ID不会在列表中重复 我想避免使用for循环,而这正是我现在的困
library(tidyverse)
# example data
dt = data.frame(ID = 1:3,
Product_List = c("92","88, 89", "88, 92"), stringsAsFactors = F)
dt %>%
separate_rows(Product_List) %>% # split strings to different rows
count(Product_List) %>% # count elements
top_n(2, n) %>% # select top 2 based on counts
rename(No_of_Txns = n) # rename counts column
# # A tibble: 2 x 2
# Product_List No_of_Txns
# <chr> <int>
# 1 88 2
# 2 92 2
库(tidyverse)
#示例数据
dt=数据帧(ID=1:3,
产品列表=c(“92”、“88、89”、“88、92”),stringsAsFactors=F)
dt%>%
分隔行(产品列表)%>%#将字符串拆分为不同的行
计数(产品列表)%>%#计数元素
top_n(2,n)%>%#根据计数选择top 2
重命名(n个数)#重命名计数列
##tibble:2x2
#Txns的产品清单编号
#
# 1 88 2
# 2 92 2
您可以将其更改为
top\n(5,n)
,以获得实际示例中的前5名。类似于AntoniosK的解决方案:
library(dplyr)
library(tidyr)
df %>%
separate_rows(Product_List) %>%
group_by(Product_List) %>%
summarise(No_of_Txns = n()) %>%
arrange(desc(No_of_Txns))