R语言中分割字符串并检查分割后所有元素是否唯一的实现问题
问题解决方法
你的需求本质是判断单条id拆分后所有元素是否完全一致,对应判断逻辑为拆分后向量去重后的长度是否为1,修改原有sapply的匿名函数逻辑即可实现:
# 原数据框 df <- data.frame( "id" = c("001;002;003", "001;001;001", "001;001;002"), "v1" = c("a", "b", "c") ) # 基础R实现 res <- sapply(strsplit(df$id, ";"), function(x) length(unique(x)) == 1)
输出的res向量就是你需要的FALSE TRUE FALSE结果,如果要直接合并到原数据框:
df$all_same_id <- res
最终数据框输出效果:
print(df)
id v1 all_same_id
1 001;002;003 a FALSE
2 001;001;001 b TRUE
3 001;001;002 c FALSE
可选tidyverse实现
如果常用tidyverse生态,也可以用如下写法:
library(dplyr) library(stringr) df <- df %>% rowwise() %>% mutate(all_same_id = n_distinct(str_split(id, ";")[[1]]) == 1) %>% ungroup()
原代码问题说明
你原有代码的逻辑是将拆分去重后的id值和原数据框的完整id列(分号分隔的长字符串)做匹配,和你的需求完全不符,因此无法得到正确结果。
内容的提问来源于stack exchange,提问作者monteromati
相关产品推荐
相关产品推荐

