Выберите лучшие значения N с условиями - PullRequest
0 голосов
/ 29 октября 2019

У меня есть такой набор данных:

data <- tribble(
  ~shop_name,  ~category,       ~NumberOfProducts,
  "A",         "Game",            50,
  "A",         "Book",            40,
  "A",         "Electronic",      30,
  "B",         "Home",            90, 
  "B",         "Game",           100,
  "B",         "Electronic",      50,
  "C",         "Home",            60, 
  "C",         "Book",            30, 
  "A",         "Garden",          15,
  "B",         "Garden",          10,
)

Но теперь я хочу создать новый фрейм данных примерно так:

newdata <- tribble(
  ~shop_name,  ~top_category,
   "A",        "Game, Book, Electronic",  
   "B",        "Game, Home, Electronic",
   "C",        "Home, Book"
)

Это означает, что я хочусгруппируйте мои данные на основе «shop_name», а затем я хочу создать новую переменную (top_category), которая отображает три верхние категории на основе «NumberOfProducts».

Я уже пытался его кодировать. Но я получил только первую тройку, когда кодировал так:

data %>% top_n(3, NumberOfProducts)

Может ли кто-нибудь помочь мне получить новые данные, которые показывают три верхние категории?

Ответы [ 2 ]

2 голосов
/ 29 октября 2019

Вы находитесь на правильном пути с '' группируйте мои данные ''. Вы можете использовать group_by для применения функции top_n по магазинам. Чтобы преобразовать их в один ряд, вы можете использовать summarize с toString

data %>% 
  group_by(shop_name) %>% 
  top_n(3, NumberOfProducts) %>% 
  summarize(top_category = toString(category))

# A tibble: 3 x 2
# shop_name top_category          
# <chr>     <chr>                 
# 1 A         Game, Book, Electronic
# 2 B         Home, Game, Electronic
# 3 C         Home, Book
1 голос
/ 29 октября 2019

вы можете сгруппировать по shop_name, а затем использовать summarise и вставить верхние категории:

data %>% group_by(shop_name) %>% 
 top_n(3, NumberOfProducts) %>%
 arrange(-NumberOfProducts) %>%
 summarise(top_category = paste(category, collapse = ", "))

# A tibble: 3 x 2
  shop_name top_category          
  <chr>     <chr>                 
1 A         Game, Book, Electronic
2 B         Game, Home, Electronic
3 C         Home, Book  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...