如何解决在R中,当存在较短版本时,请排除字符串中的字符
数据是一个玩具示例。 have
中的每个字符都有字母。如果较短的字符包含n-1个字母,我想排除字符。
例如,因为我们有AB,所以排除了亚行。保留ADE是因为我们没有AD AE或DE。
have <- c('A,B','B,C','A,D,B,E',E')
want <- c('A,E')
我知道grepl
可能会有用,但是我不确定如何以计算有效的方式来做到这一点。
解决方法
这里是分割字符串的一种方法。
#Split the string on comma
tmp <- strsplit(have,',')
#Iterate over the index of tmp
have[!sapply(seq_along(tmp),function(x) {
one <- tmp[[x]]
any(sapply(tmp[-x],function(y) sum(one %in% y)) >= (length(one) - 1) &
lengths(tmp[-x]) < length(one))
})]
#[1] "A,B" "B,C" "A,D,E"
-
sum(one %in% y)
计算另一个字符串中当前字符串的字符数。 -
>= (length(one) - 1)
确保n-1 of the letters
条件。 -
lengths(tmp[-x]) < length(one)
确保它更短。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。