У меня есть такие данные:
library(tidyverse)
yelp_tbl %>%
select(business_id, categories)
A tibble: 11 x 2
business_id categories
<chr> <list>
1 5-1qDFGHvYjBjBYe0B5oiQ <chr [3]>
2 isl95tLwXQHlkm_vR0PTqw <chr [6]>
3 lNwReGEso2mMhzCr0TM-mw <chr [3]>
4 XOvQUSHUjE0KkUuwDUR5OA <chr [1]>
5 8Y5p2IQMLX6QjGPzxanexg <chr [4]>
6 jozuj1ySOk7DPs7OJloj3A <NULL>
7 _TGcRp4wyVbvvDsEHXf0Zw <chr [2]>
8 3Mwko7AsZaydBm6d4tWMhg <chr [3]>
9 uhdbvZ-yCIl_Yj_sU1OhRg <chr [4]>
10 ht9AOnxm0IfSoUDJTatS1g <chr [3]>
11 5P7zzVhWvO8nXGPdy7xqhw <chr [5]>
Каждый бизнес может принадлежать к разным категориям. Таким образом, у каждого бизнеса могут быть разные значения относительно значений переменных и количества переменных.
Я хочу использовать spread
, чтобы сделать столбцы из значений переменных, и fill
"True" или "False" относительно значений categories
.
Код, который я создал до сих пор, выглядит следующим образом:
yelp_tbl %>%
select(business_id, categories) %>%
mutate(dummy = "True") %>%
map(unlist) %>%
as.data.frame() %>%
mutate_if(is.factor, as.character) %>%
spread(categories, dummy, fill = "False")
Но я получаю эту ошибку:
Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, :
arguments imply differing number of rows: 5, 26
Я понимаю, что это значит, но я не знаю, как это исправить в этом случае.
structure(list(business_id = c("5-1qDFGHvYjBjBYe0B5oiQ", "isl95tLwXQHlkm_vR0PTqw",
"lNwReGEso2mMhzCr0TM-mw", "XOvQUSHUjE0KkUuwDUR5OA", "8Y5p2IQMLX6QjGPzxanexg",
"jozuj1ySOk7DPs7OJloj3A", "_TGcRp4wyVbvvDsEHXf0Zw", "3Mwko7AsZaydBm6d4tWMhg",
"uhdbvZ-yCIl_Yj_sU1OhRg", "ht9AOnxm0IfSoUDJTatS1g", "5P7zzVhWvO8nXGPdy7xqhw"
), categories = list(c("Dry Cleaning & Laundry", "Local Services",
"Sewing & Alterations"), c("Beauty & Spas", "Skin Care", "Medical Spas",
"Hair Removal", "Health & Medical", "Laser Hair Removal"), c("Food",
"Grocery", "Specialty Food"), "Restaurants", c("Japanese", "Restaurants",
"Korean", "Sushi Bars"), NULL, c("Financial Services", "Banks & Credit Unions"
), c("Nightlife", "Dance Clubs", "Bars"), c("Gyms", "Active Life",
"Trainers", "Fitness & Instruction"), c("Event Planning & Services",
"Hotels", "Hotels & Travel"), c("Donuts", "Breakfast & Brunch",
"Restaurants", "Food", "Coffee & Tea"))), row.names = c(NA, -11L
), class = c("tbl_df", "tbl", "data.frame"))