Как получить количество строк на основе элементов столбца списков? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть набор данных с 2 столбцами.Один - это идентификатор клиента, а другой - список купленных продуктов.Данные отсортированы по идентификатору.Каждая строка представляет транзакцию.Я должен вытащить 20 лучших продуктов, представленных в большинстве транзакций.

Таким образом, данные могут выглядеть следующим образом:

ID |Product_List

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 продуктов, которые покупаются с наибольшей частотой.Идентификаторы продуктов не повторяются в списке.

Я хочу избегать использования циклов for, и это действительно то, где я сейчас застрял.

Так что мой вывод будет:

Продукт |№ Txns

88 |8

130 |5

90 |3

92 |3

91 |2

Извинения, я не знаю, как отформатировать таблицу на этомЯ сделал это с помощью цикла for, распечатав каждый список в кучу столбцов, а затем просто запустив счетчик для всего этого, но это кажется очень неэффективным способом кодирования.Я не совсем понимаю, как работать с данными, где столбец состоит из списков, в идеале я хотел бы векторизовать такую ​​операцию.

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Аналогично решению AntoniosK:

library(dplyr)
library(tidyr)

df %>%
  separate_rows(Product_List) %>%
  group_by(Product_List) %>%
  summarise(No_of_Txns = n()) %>%
  arrange(desc(No_of_Txns))
1 голос
/ 12 апреля 2019

Это должно помочь:

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

Вы можете изменить это значение на top_n(5, n), чтобы получить 5 лучших в вашем реальном примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...