Я пытаюсь проверить, существует ли строка в каком-либо из элементов списка, а затем использовать имя этого списка, если оно существует.
Сейчас я использую case_when
и * 1004. *, но я бы хотел более эффективный способ просмотреть мои named_list
и затем использовать имя.
fruit <- c("apple", "banana", "pear")
drinks <- c("beer", "wine", "coffee")
stuff <- c("chair", "couch", "desk")
df <- data.frame(foo = sample(x = c(fruit, drinks, stuff), size = 10, replace = T),
x = sample(1:500, size = 10, replace = T))
df
# foo x
# pear 449
# wine 241
# pear 53
# couch 72
# banana 443
# coffee 172
# desk 126
# desk 183
# desk 7
# banana 73
df %>%
mutate(category = case_when(grepl(paste0(fruit, collapse = "|"), foo, ignore.case = T) ~ "fruit",
grepl(paste0(drinks, collapse = "|"), foo, ignore.case = T) ~ "drinks",
grepl(paste0(stuff, collapse = "|"), foo, ignore.case = T) ~ "stuff"))
# foo x category
# pear 449 fruit
# wine 241 drinks
# pear 53 fruit
# couch 172 stuff
# banana 443 fruit
# coffee 172 drinks
# desk 126 stuff
# desk 183 stuff
# desk 7 stuff
# banana 73 fruit
# create named list of lists/vectors
named_list <- Hmisc::llist(fruit, drinks, stuff)
named_list