R语言基于全量字典生成选中字符串的反向补集字符串方法
实现代码
你可以使用tidyverse生态的行处理逻辑快速实现需求,以下代码可直接得到和示例完全一致的输出:
library(dplyr) library(stringr) df_result <- df %>% # 按行处理每条记录 rowwise() %>% mutate( # 拆分全量字典为单词向量 full_vec = str_split(full_string, ", ") %>% unlist(), # 拆分选中字符串为单词向量,特殊处理空值 selected_vec = ifelse( selected_strings == "", list(character(0)), str_split(selected_strings, ", ") %>% unlist() ) %>% unlist(), # 求差集后拼接为字符串 inverse_string = setdiff(full_vec, selected_vec) %>% paste(collapse = ", ") ) %>% # 移除中间计算用的辅助列 select(-full_vec, -selected_vec) %>% ungroup()
可选排序实现
如果需要将反向补集按字母顺序排序,仅需修改inverse_string的生成逻辑,增加sort()步骤即可:
inverse_string = setdiff(full_vec, selected_vec) %>% sort() %>% paste(collapse = ", ")
无额外依赖的Base R简化写法
如果你不想加载stringr包,也可以用Base R原生的strsplit函数实现拆分,逻辑完全一致:
library(dplyr) df_result <- df %>% rowwise() %>% mutate( full_vec = strsplit(full_string, ", ")[[1]], selected_vec = ifelse(selected_strings == "", list(character(0)), strsplit(selected_strings, ", ")[[1]]) %>% unlist(), inverse_string = setdiff(full_vec, selected_vec) %>% paste(collapse = ", ") ) %>% select(-full_vec, -selected_vec) %>% ungroup()
内容的提问来源于stack exchange,提问作者ulima2_
相关产品推荐
相关产品推荐

