dplyr unnest()处理大型逗号分隔字符数据无效果如何解决
问题原因
unnest()的作用是拆分列表列、嵌套数据框列,你当前的keyword列是普通逗号分隔字符串格式,不属于unnest()可以直接拆分的列类型,因此不会触发行拆分逻辑。names_sep参数是拆分嵌套列后生成多列时的命名分隔符,不是字符串内容的分隔符,你传入,只会导致生成的列名带逗号,就是你遇到的列名变为keyword,keyword的问题。
解决代码
tidyr 1.3.0及以上版本可以直接用separate_longer_delim()一步完成拆分,代码更简洁:
library(dplyr) library(tidyr) CB_keyword <- organizations %>% # 先做匹配筛选,比手动提取列再拼接tibble更不容易出错 filter(uuid %in% org_uuid) %>% # 重命名为你需要的列名 select(id = uuid, keyword = category_list) %>% # 按逗号拆分关键词为单独行 separate_longer_delim(cols = keyword, delim = ",")
如果你的tidyr版本较低,没有separate_longer_delim()函数,可以用字符串拆分+unnest的组合写法:
library(dplyr) library(tidyr) library(stringr) CB_keyword <- organizations %>% filter(uuid %in% org_uuid) %>% select(id = uuid, keyword = category_list) %>% # 先把每个单元格的逗号分隔字符串拆成向量列表 mutate(keyword = str_split(keyword, ",")) %>% # 拆分列表列为独立行 unnest(keyword)
补充说明
如果拆分后关键词前后带有多余空格,可以在管道末尾加一行mutate(keyword = str_squish(keyword))清除空白字符。
内容的提问来源于stack exchange,提问作者xtufer
相关产品推荐
相关产品推荐

