Guest User

Untitled

a guest
Jul 20th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.51 KB | None | 0 0
  1. library(tidyverse)
  2.  
  3. # Create tree of categories and subcategories
  4. categories <-
  5. list(
  6. "category_1" = c(
  7. "subcategory_1",
  8. "subcategory_2",
  9. "subcategory_3",
  10. "subcategory_4",
  11. "subcategory_5"
  12. ),
  13. "category_2" = c(
  14. "subcategory_6",
  15. "subcategory_7",
  16. "subcategory_8",
  17. "subcategory_9",
  18. "subcategory_10"
  19. ),
  20. "category_3" = c(
  21. "subcategory_11",
  22. "subcategory_12",
  23. "subcategory_13",
  24. "subcategory_14",
  25. "subcategory_15"
  26. )
  27. )
  28.  
  29.  
  30. # Create dataframe of mixed categories and cateogires `subcategory`) along with
  31. # expected category (parent)
  32. df <-
  33. tibble(
  34. id = seq(1:5),
  35. subcategory = c(
  36. "category_2",
  37. "subcategory_13",
  38. "subcategory_4",
  39. "category_3",
  40. "category_1"
  41. ),
  42. expected_category = c(
  43. "category_2",
  44. "category_3",
  45. "category_1",
  46. "category_3",
  47. "category_1"
  48. )
  49. )
  50.  
  51.  
  52. #' @title find_cateogry
  53. #' @description return parent categories of subcategories
  54. #' @details Given a fector of catgories will return a vector of aprent
  55. #' categories.
  56. find_category <- function(x) {
  57. y <- x %in% names(categories)
  58. y[y == TRUE] <- x[x %in% names(categories)]
  59. y[y == "FALSE"] <- map_int(x[y == FALSE], ~grep(.x, categories)) %>%
  60. names(categories)[.]
  61. return(y)
  62. }
  63.  
  64. # debug(find_category)
  65.  
  66. # Test it returns vector of length 5
  67. find_category(df$subcategory)
  68.  
  69. df %>%
  70. mutate(category = find_category(subcategory),
  71. match = if_else(category == expected_category, TRUE, FALSE))
Add Comment
Please, Sign In to add comment