Я играю с набором данных Yelp и хочу отфильтровать бизнес-набор в соответствии с категорией.Фильтр в вложенных кадрах данных
Я импортировал файл JSON в R с
yelp_business = stream_in(file("yelp_academic_dataset_business.json"))
что приводит затем в следующем кадре данных:
'data.frame': 77445 obs. of 15 variables:
$ business_id : chr "5UmKMjUEUNdYWqANhGckJw" "UsFtqoBl7naz8AVUBZMjQQ" "3eu6MEFlq2Dg7bQh8QbdOg" "cE27W9VPgO88Qxe4ol6y_g" ...
$ full_address : chr "4734 Lebanon Church Rd\nDravosburg, PA 15034" "202 McClure St\nDravosburg, PA 15034" "1 Ravine St\nDravosburg, PA 15034" "1530 Hamilton Rd\nBethel Park, PA 15234" ...
$ hours :'data.frame': 77445 obs. of 7 variables:
..$ Friday :'data.frame': 77445 obs. of 2 variables:
.. ..$ close: chr "21:00" NA NA NA ...
.. ..$ open : chr "11:00" NA NA NA ...
..$ Tuesday :'data.frame': 77445 obs. of 2 variables:
.. ..$ close: chr "21:00" NA NA NA ...
.. ..$ open : chr "11:00" NA NA NA ...
..$ Thursday :'data.frame': 77445 obs. of 2 variables:
.. ..$ close: chr "21:00" NA NA NA ...
.. ..$ open : chr "11:00" NA NA NA ...
..$ Wednesday:'data.frame': 77445 obs. of 2 variables:
.. ..$ close: chr "21:00" NA NA NA ...
.. ..$ open : chr "11:00" NA NA NA ...
..$ Monday :'data.frame': 77445 obs. of 2 variables:
.. ..$ close: chr "21:00" NA NA NA ...
.. ..$ open : chr "11:00" NA NA NA ...
..$ Sunday :'data.frame': 77445 obs. of 2 variables:
.. ..$ close: chr NA NA NA NA ...
.. ..$ open : chr NA NA NA NA ...
..$ Saturday :'data.frame': 77445 obs. of 2 variables:
.. ..$ close: chr NA NA NA NA ...
.. ..$ open : chr NA NA NA NA ...
$ open : logi TRUE TRUE TRUE FALSE TRUE TRUE ...
$ categories :List of 77445
..$ : chr "Fast Food" "Restaurants"
..$ : chr "Nightlife"
..$ : chr "Auto Repair" "Automotive"
..$ : chr "Active Life" "Mini Golf" "Golf"
..$ : chr "Shopping" "Home Services" "Internet Service Providers" "Mobile Phones" ...
..$ : chr "Bars" "American (New)" "Nightlife" "Lounges" ...
..$ : chr "Active Life" "Trainers" "Fitness & Instruction"
..$ : chr "Bars" "American (Traditional)" "Nightlife" "Restaurants"
..$ : chr "Auto Repair" "Automotive" "Tires"
..$ : chr "Active Life" "Mini Golf"
..$ : chr "Home Services" "Contractors"
..$ : chr "Veterinarians" "Pets"
..$ : chr "Libraries" "Public Services & Government"
..$ : chr "Automotive" "Auto Parts & Supplies"
Теперь я хочу, чтобы отфильтровать все строки в соответствии с бизнес-категории и хотите включают все категории, в которых есть еда в списке категорий.
Однако, если я просто пытаюсь это таким образом:
input ="food"
engage = filter(yelp_business, grepl(input, categories))
я получаю следующий код ошибки:
Error: data_frames can only contain 1d atomic vectors and lists
Я первый подозреваемый вложенную структуру, чтобы быть причиной этого. Однако использование tidyjson не помогает ни в качестве категории, а в виде списка, а не в кадре данных в основном кадре данных.
У кого-нибудь есть идея, как это решить? Мне просто нужен список всех идентификаторов бизнеса в ресторане, чтобы затем отфильтровать обзорный файл json от Yelp, чтобы извлечь письменные отзывы.
Любая помощь с этим действительно оценена! Большое спасибо!
попробуйте 'yelp_business $ categories <- unlist (yelp_business $ categories)' –
Спасибо Пьер, я тоже это пробовал, но проблема в том, что каждая строка в категориях имеет различное количество тегов категории. Отметьте результаты в 227451 новых строках вместо необходимых строк 77445, чтобы получить следующее сообщение об ошибке: 'Ошибка в' $ <-. Data.frame' ('* tmp *', "categories", value = c (" Fast Food ",: Замена имеет 227451 строк, данные имеют 77445' – rkuebler
Это не проблема. См.' Grepl («a», список (c («a», «b»), «c»)) ' Проблема заключается в вложенных фреймах данных выше. –