R 如何根据列表列的元素获取行数?

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循环,而这正是我现在的困

我有一个包含两列的数据集。一个是客户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循环完成了这项工作,通过将每个列表取消列出到一组列中,然后对整个列表进行计数,但这似乎是一种非常低效的编码方式。我不太清楚如何处理列由列表组成的数据,理想情况下,我希望将这样的操作矢量化。

这将有助于:

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))