Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library(tidyverse)
- # Create tree of categories and subcategories
- categories <-
- list(
- "category_1" = c(
- "subcategory_1",
- "subcategory_2",
- "subcategory_3",
- "subcategory_4",
- "subcategory_5"
- ),
- "category_2" = c(
- "subcategory_6",
- "subcategory_7",
- "subcategory_8",
- "subcategory_9",
- "subcategory_10"
- ),
- "category_3" = c(
- "subcategory_11",
- "subcategory_12",
- "subcategory_13",
- "subcategory_14",
- "subcategory_15"
- )
- )
- # Create dataframe of mixed categories and cateogires `subcategory`) along with
- # expected category (parent)
- df <-
- tibble(
- id = seq(1:5),
- subcategory = c(
- "category_2",
- "subcategory_13",
- "subcategory_4",
- "category_3",
- "category_1"
- ),
- expected_category = c(
- "category_2",
- "category_3",
- "category_1",
- "category_3",
- "category_1"
- )
- )
- #' @title find_cateogry
- #' @description return parent categories of subcategories
- #' @details Given a fector of catgories will return a vector of aprent
- #' categories.
- find_category <- function(x) {
- y <- x %in% names(categories)
- y[y == TRUE] <- x[x %in% names(categories)]
- y[y == "FALSE"] <- map_int(x[y == FALSE], ~grep(.x, categories)) %>%
- names(categories)[.]
- return(y)
- }
- # debug(find_category)
- # Test it returns vector of length 5
- find_category(df$subcategory)
- df %>%
- mutate(category = find_category(subcategory),
- match = if_else(category == expected_category, TRUE, FALSE))
Add Comment
Please, Sign In to add comment