如何在R的tibble数据框中拆分列表列实现产品与问题一一映射
解决方法
要把包含列表的product_tags和issue_tags列拆成每行一个产品对应一个问题的格式,用tidyverse套件里的dplyr和tidyr就能完成,具体操作如下:
首先将你提供的示例数据赋值到变量中:
library(tidyverse) # 导入示例数据 df <- structure(list(product_tags = list(c("jim", "choice"), c("misinformed", "update", "iphone 13 show", "update one"), c("wallpaper", "ios15" ), c("hello", "io 16", "apple music"), c("default", "wallpaper" ), "issue", "machine", "escalate", "copy", c("update 16", "tomorow" ), "cloud", "macbook", c("notification", "lock screen"), c("unlock 8", "ipad", "support", "ipad"), c("notification", "lock screen")), issue_tags = list("third", "learn", "get back", c("stop playing", "ios16", "help"), "bring", "category", "minor", "iphone macbook", c("work", "detail"), "iphne", c("agree back", "google" ), c("laptop", "business", "fine"), "change", c("proof", "fail"), "go back")), row.names = c(NA, -15L), class = c("tbl_df", "tbl", "data.frame"))
然后执行拆分操作:
# 拆分列表列,实现产品与问题的一一映射 result <- df %>% # 先把product_tags拆成单个元素的行,保留原行的issue_tags unnest_longer(product_tags) %>% # 再把issue_tags拆成单个元素的行,此时每行就是一个产品对应一个问题 unnest_longer(issue_tags) # 查看结果 head(result)
代码说明
unnest_longer()函数会把列表类型的列拆成多行,每个列表元素单独占一行,同时保留其他列的对应值- 先拆产品列再拆问题列,能实现原数据行中所有产品标签和问题标签的笛卡尔配对——也就是每个产品对应该行的所有问题,每个问题对应该行的所有产品
- 如果需要去除重复的配对(比如原数据里重复的
ipad标签),可以在最后加上distinct(product_tags, issue_tags, .keep_all = TRUE)
内容的提问来源于stack exchange,提问作者Rshiny Learner
相关产品推荐
相关产品推荐

