gpt4 book ai didi

r - 如何将可变数量的连接标签的列拆分为每个标签一列?

转载 作者:行者123 更新时间:2023-12-01 08:52:11 25 4
gpt4 key购买 nike

考虑以下数据:

library(tibble)

key <- c("a", "b", "c", "d", "e")
tags <- c("A,B", "B", "A,E", "C,D", "")
data <- tibble(key, tags)

这里,key 可以表示书名,tags 可以是流派,或者 key 可以是电子邮件发件人,tags 可能意味着收件人。本质是 tags 列可以有可变(可能为零)数量的不同子字符串。

为了拆分固定数量的连接标签(例如数据),我可以使用 tidyr::spread,我可以使用字符串拆分来分隔 tags 列本身,但是如何将两者结合起来呢?

我希望转换后的数据如下所示:

key  A     B     C     D     E
a TRUE TRUE FALSE FALSE FALSE
b FALSE TRUE FALSE FALSE FALSE
c TRUE FALSE FALSE FALSE TRUE
d FALSE FALSE TRUE TRUE FALSE
e FALSE FALSE FALSE FALSE FALSE

我可以看到可以通过拆分 tags 分几个步骤来执行此操作,确定唯一的子字符串并遍历每个子字符串并测试每行的 tags 是否包含字符串。但我更愿意在使用 tidyverse 的管道中进行此操作

问题:如何将可变数量的串联标签拆分为每个标签一列?

最佳答案

这是一个基本的 R 替代方法:

# get unique values in tags
x <- unique(unlist(strsplit(df$tags, ",", fixed=TRUE)))
# check for existence in the tags column
res <- sapply(paste0("(^|.*,)", x, "(,.*|$)"), grepl, df$tags)
# add sensible dimension names
dimnames(res) <- list(df$key, x)

生成的矩阵如下所示:

res
# A B E C D
#a TRUE TRUE FALSE FALSE FALSE
#b FALSE TRUE FALSE FALSE FALSE
#c TRUE FALSE TRUE FALSE FALSE
#d FALSE FALSE FALSE TRUE TRUE
#e FALSE FALSE FALSE FALSE FALSE

关于r - 如何将可变数量的连接标签的列拆分为每个标签一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38721784/

25 4 0