【发布时间】:2020-05-28 07:28:21
【问题描述】:
我正在处理以标签为特征的产品数据集。也就是说,它们具有包含在逗号分隔的单词列表中的属性。例如,
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|
我尝试使用tidyr包中的separate函数,但是标签是无序的,很难为每个标签做一列。
我找到了使用dplyr 包中的mutate 并为每个标签手动创建一列的解决方案,
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),
...
)
但未来可能会出现新标签,我想让它可扩展。
¿有什么方法可以轻松做到吗?
【问题讨论】:
标签: r dataframe tidyr data-cleaning