Я имею дело с набором данных продуктов, которые характеризуются тегами. То есть у них есть свойство, которое состоит из списка слов, разделенных запятыми. Например,
data.frame(
id = c(11, 12, 13),
tags =c("wood,small,old","big,iron,artistic", "pretty,wood")
)
Я хотел бы разделить столбец тегов на разные логические столбцы для каждого тега, а именно
| id | wood | iron | small | big | old | artistic | pretty |
------------------------------------------------------------
| 11 | TRUE| FALSE| TRUE| FALSE| TRUE| FALSE| FALSE|
| 12 | FALSE| TRUE| FALSE| TRUE| FALSE| TRUE| FALSE|
| 13 | TRUE| FALSE| FALSE| FALSE| FALSE| FALSE| TRUE|
Я пытался использовать функцию separate
из tidyr
, но теги неупорядочены, и тогда трудно создать столбец для каждого тега.
Я нашел решение, используя пакет mutate
из dplyr
и создав вручную столбец для каждый тег
has_tag <- function(tag, tags) {
strsplit(tags, ",") %>% map_lgl(function(x) tag %in% x)
}
df %>%
mutate(
wood = has_tag("wood", tags),
iron = has_tag("iron", tags),
...
)
, но в будущем могут появиться новые теги, и я хотел бы сделать его масштабируемым.
¿Есть ли способ сделать это легко?