gpt4 book ai didi

r - 在不同顺序的字符串中查找字母

转载 作者:行者123 更新时间:2023-12-02 03:22:29 26 4
gpt4 key购买 nike

我有 2 个代表树的字符串。每个'{'都意味着去树中的较低级别( child )。每个字符串包含除以“{”一个或多个的字母(或单词)。我只想转换相同级别的字母——第二个(或第一个)字符串与另一个字符串中的字母顺序相同,而不更改字符串中的位置。这是示例:

> str1<-"{a{b}{c{{d}{e}}}}" 
> str2<-"{a{c}{b{{e}{d}}}}"

我想将 str2 更改为“{a{b}{c{d{e}}}}”。由于“b”和“c”处于同一级别(str1 和 str2 中“a”的 child ),它们只是在 str1 和 str2 中的顺序不同。 “d”和“e”也是如此。我想将它们在 str2 中更改为 str2<-"{a{c}{b{{d}{e}}}}"与 str1 中的顺序相同。单个字母仅是示例。它们可能比一个字母长。有没有快速而简短的解决方案?我认为对每个字符串进行排序的最佳方法例如:

 > str1<-"{a{b}{c{{d}{e}}}}" 
> str2<-"{a{b}{c{{d}{e}}}}"

对于我来说,这是解决这个问题的很好的中间解决方案。命令 sort (x) 用于向量。我想使用字符串并保留“{”的位置。这意味着我们只能对同一级别的节点(兄弟节点)进行排序,但不能在更高级别之间进行排序。例如在以下情况中:

> str1<-"{a{b}{c}}" 
> str2<-"{b{a}{c}}"

因为 'a' 是根,'b' 是他的 child ,对于 str2 反之亦然,我们无法对这种情况进行排序。我们可以在以下情况下进行排序:

> str1<-"{a{b}{c}}" 
> str2<-"{a{c}{b}}"

因为在上面的例子中,{a} 是根,而 {b} 和 {c} 是 {a} 的同等级别 child 。

最佳答案

这里有一个提示——要符合交换条件,您不需要“父代”相同,只需“世代”(树的级别或深度)相同即可。您可以从 { 的计数减去 } 的计数得到这个深度。我不明白你的大括号约定,但只要它是统一的,它就应该识别同一代的成员。

> str1<-"{a{b}{c{{d}{e}}}}" 

> require(stringr)
> str_match <- str_extract_all(str1,"\\w+")[[1]]
> str_match
[1] "a" "b" "c" "d" "e"

> str_loc <- str_locate_all(str1,"\\w+")[[1]]
> str_loc
start end
[1,] 2 2
[2,] 4 4
[3,] 7 7
[4,] 10 10
[5,] 13 13

> prior_str <- str_sub(str1, end=str_loc[,'start'])
> prior_str
[1] "{a" "{a{b" "{a{b}{c" "{a{b}{c{{d" "{a{b}{c{{d}{e"

> str_depth <- str_count(prior_str,"[{]") - str_count(prior_str,"[}]")
> str_depth
[1] 1 2 2 4 4

希望你知道足够的 R 来从那里开始。

关于r - 在不同顺序的字符串中查找字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32325436/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com