计算子字符串中字符串的下一次出现

马辛

今天,尽管遇到了寻求解决方案的问题,但我仍然无法独自解决一个问题-在我看来,我的方法是错误的,还是没人问过类似的问题。

我正在研究Markov归因,所以我有一些带有类似字符串的列:

A > B > B > C > B > A > C > B > A

等等

...它是基于postgresql函数'string_agg'创建的。

我认为对我来说很重要的是分配一些时间,每个时间在整个字符串中都出现。为了清楚起见,最终,它看起来像这样:

A1 > B1 > B2 > C1 > B3 > A2 > C2 > B4 > A3

存在三个主要挑战:

  • 大约有100种不同类型的元素可能会改变时间,因此很难对其进行硬编码,
  • 数据集大约有20万行,
  • 字符串可能长达几百个字符

我想到的唯一一件事就是编写某种循环,但是直到完成为止,这似乎需要花费很多时间。

我也考虑过在postgresql级别上解决它,但是也找不到高效,简单的解决方案。

G.格洛腾迪克

如何执行此操作在gsubfn插图中进行了说明首先使用那里的代码,我们pword使用方法pre定义原型对象funpre初始化单词列表(存储遇到的每个单词的当前计数),并fun在每次遇到新单词时对其进行更新,并且还对该单词进行后缀,并通过计数返回后缀单词。

定义完上述内容后,请gsubfn使用运行pword对于输入的每个分量gsubfn将首先运行pre,然后对于正则表达式的每个匹配\\w+ gsubfn将输入匹配到fun,运行fun并将匹配替换为的输出fun

我们已经假设要添加带计数的单词的单词是匹配的\w+,在问题中的示例就是这种情况,但是如果实际数据不同,则可能需要更改模式。

library(gsubfn)
s <- rep("A > B > B > C > B > A > C > B > A", 3) # sample input

pwords <- proto(
  pre = function(this) { this$words <- list() },
  fun = function(this, x) {
    if (is.null(words[[x]])) this$words[[x]] <- 0
    this$words[[x]] <- this$words[[x]] + 1
    paste0(x, words[[x]])
  }
)

gsubfn("\\w+", pwords, s)

给予:

[1] "A1 > B1 > B2 > C1 > B3 > A2 > C2 > B4 > A3"
[2] "A1 > B1 > B2 > C1 > B3 > A2 > C2 > B4 > A3"
[3] "A1 > B1 > B2 > C1 > B3 > A2 > C2 > B4 > A3"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从字符串中删除一个单词,直到下一次出现空格

sed 刪除字符串直到下一次出現

查找出现在另一个字符串之后且在下一次出现第三个字符串之前的字符串

如何在某个字符串之后但在下一次出现特定字符之前插入一个字符串?

如何替换字符串中第一次出现的子字符串?

C ++在子字符串中查找字符串的最后一次出现

如何删除字符串中第一次出现的子字符串?

子字符串,直到字符串中第一次出现逗号

如何从字符串中删除最后一次出现的子字符串?

Oracle/PLSQL-直到下一次出现字符的子串

搜索相同字符串的一次或多次出现并编辑下一行

如何在第一次循环迭代后获取更改的内容(字符串)以用于机器人框架的下一次迭代

用熊猫替换字符串中字符的所有但最后一次出现的字符

查找字符串的最后一次出现

RegEx从最后一次出现的字符串开始

Javascript字符串替换最后一次出现

从字符串中的一组字符串中每出现一次字符串后插入一个数字

在SQL中替换字符串中第一次出现的子字符串

替换字符串(bash)中子字符串的最后一次出现

PHP替换字符串中最后一次出现的字符串?

查找字符串中子字符串的最后一次出现,将其替换

查找字符串中子字符串的最后一次出现,将其替换

XSL子字符串-字符串的最后一次出现之后

如何找到Swift字符串中子字符串的最后一次出现?

替换字符串中子字符串的最后一次出现

查找字符串Python中字符的最后一次出现

替换字符串中字符的最后一次出现

从随机字符串中删除非数字字符,但第一次出现的是#

删除文件c ++中字符串中最后一次出现的字符