相关疑难解决方法(0)

R中最长的公共子串查找两个字符串之间的非连续匹配

我有一个关于在R中找到最长公共子字符串的问题.在StackOverflow上搜索几个帖子时,我了解了qualV包.但是,我看到这个包中的LCS函数实际上找到了string1中存在的所有字符,即使它们不是连续的.

为了解释,如果字符串字符串1:" HEL LO"字符串2:" HEL 12345lo"我希望可以将输出为HEL,但是我得到的输出为hello.我一定做错了什么.请参阅下面的代码.

library(qualV)
a= "hello"
b="hel123l5678o" 
sapply(seq_along(a), function(i)
    paste(LCS(substring(a[i], seq(1, nchar(a[i])), seq(1, nchar(a[i]))),
              substring(b[i], seq(1, nchar(b[i])), seq(1, nchar(b[i]))))$LCS,
          collapse = ""))
Run Code Online (Sandbox Code Playgroud)

我也尝试了Rlibstree方法,但我仍然得到不连续的子串.此外,子串的长度也与我的预期不同.请参阅下文.

> a = "hello"
> b = "h1e2l3l4o5"

> ll <- list(a,b)
> lapply(data.frame(do.call(rbind, ll), stringsAsFactors=FALSE), function(x) getLongestCommonSubstring(x))
$do.call.rbind..ll.
[1] "h" "e" "l" "o"

> nchar(lapply(data.frame(do.call(rbind, ll), stringsAsFactors=FALSE), function(x) getLongestCommonSubstring(x)))
do.call.rbind..ll.
                21
Run Code Online (Sandbox Code Playgroud)

r lcs

14
推荐指数
3
解决办法
6237
查看次数

查找两个字符变量之间的公共子串

我有两个字符变量(对象的名称),我想提取最大的公共子字符串.

a <- c('blahABCfoo', 'blahDEFfoo')
b <- c('XXABC-123', 'XXDEF-123')
Run Code Online (Sandbox Code Playgroud)

我想要以下结果:

[1] "ABC" "DEF"
Run Code Online (Sandbox Code Playgroud)

作为输入的这些向量应该给出相同的结果:

a <- c('textABCxx', 'textDEFxx')
b <- c('zzABCblah', 'zzDEFblah')
Run Code Online (Sandbox Code Playgroud)

这些例子具有代表性.字符串包含标识元素,每个向量元素中的其余文本是常见的,但未知.

是否有解决方案,在以下某个地方(按优先顺序):

  1. 基地R.

  2. 推荐套餐

  3. CRAN上提供的软件包

假设重复的答案不符合这些要求.

r lcs

12
推荐指数
2
解决办法
5859
查看次数

确定一个共同的模式

是否有(容易)识别两个字符串共有的共同模式的可能性?这里有一个小例子来说明我的意思:

我有两个包含字符串的变量.两者都包括相同的模式("ABC")和一些"噪音".

a <- "xxxxxxxxxxxABCxxxxxxxxxxxx"
b <- "yyyyyyyyyyyyyyyyyyyyyyyABC"
Run Code Online (Sandbox Code Playgroud)

让我说我不知道​​常见的模式,我希望R找出两个字符串都包含"ABC".我怎样才能做到这一点?

*编辑

第一个例子可能有点简单化.这是我的真实数据的一个例子.

a <- "DUISBURG-HAMBORNS"
b <- "DUISBURG (-31.7.29)S"
Run Code Online (Sandbox Code Playgroud)

两个字符串都包含"DUISBURG",我希望函数能够识别.

*编辑

我在评论中发布的链接中提出了解决方案.但我仍然没有我想要的.

library(qualV)
LCS(strsplit(a[1], '')[[1]],strsplit(b[1], '')[[1]])$LCS

[1] "D" "U" "I" "S" "B" "U" "R" "G" "-" " " " " "S"
Run Code Online (Sandbox Code Playgroud)

如果函数正在寻找两个向量的最长公共子序列,为什么它不会停止"D" "U" "I" "S" "B" "U" "R" "G"?.

string r lcs

2
推荐指数
1
解决办法
1171
查看次数

标签 统计

lcs ×3

r ×3

string ×1