如何从tibble单元格提取不定长列表元素并生成唯一向量?
提取列表列元素并生成唯一排序向量的解决方法
嘿,你已经完成了最关键的拆分步骤啦,剩下的操作其实很简单,几步就能得到你想要的final向量。
假设你用tibble::enframe(res)得到的那个包含列表列的tibble叫做genre_tbl,直接用下面的代码就能搞定:
# 把value列里的所有列表元素展开成一维向量 all_genres <- unlist(genre_tbl$value) # 去重+排序得到最终结果 final <- sort(unique(all_genres))
运行之后,final就会输出你想要的排序好的唯一电影类型:
[1] "Action" "Adventure" "Comedy" "Crime" "Drama" "Romance" "Sci-Fi" "Thriller"
用tidyverse链式写法更流畅
如果你习惯用tidyverse的风格,可以把整个流程串起来,不用单独存中间变量:
library(tibble) library(dplyr) test <- c("Comedy|Romance", "Action|Crime|Thriller", "Action|Adventure|Drama|Sci-Fi") final <- test %>% sapply(function(x) unlist(strsplit(x, "\\|"))) %>% enframe() %>% pull(value) %>% # 提取出存着类型列表的value列 unlist() %>% # 把嵌套列表展开成普通字符向量 unique() %>% # 剔除重复的类型 sort() # 按字母顺序排序
简单解释下每一步
pull(value):把tibble里的value列单独提取出来,得到一个包含多个子列表的列表对象;unlist():把所有子列表里的元素全部拉出来,变成一个一维的字符向量;unique():自动去掉重复出现的电影类型;sort():按字母顺序给类型排序,和你给出的目标结果完全匹配。
要是你不需要排序的话,去掉sort()就行,不过看你想要的结果是排好序的,所以加上这个步骤刚好。
内容的提问来源于stack exchange,提问作者SkyWalker
相关产品推荐
相关产品推荐

