gpt4 book ai didi

r - 如何搜索每次都不完全相同的模式?

转载 作者:行者123 更新时间:2023-12-03 23:18:50 25 4
gpt4 key购买 nike

我有一个这样的 list :

 list <- c("xxx 23 cut", "yyy", "zzz", "www 55 cut", "kkk", "ggg", "yyy", "eee 7 cut", "ccd" )

这种情况下的搜索模式是“任意数切割”。因此,为了以更好的方式可视化列表,列表采用以下模式
"before item (=xxx) "  "any number cut (= 23 cut)"
"after item (=yyy)"
"after item (=zzz)"
"before item (=www) " "any number cut (= 55 cut)"
"after item (=kkk)"
"after item (=ggg)"
"after items (=yyy)"
"before item (=eee) " "any number cut (= 7cut)"
"after item (=cce)"

我想将“before items”放在第1列,直到找到另一个“任意数字切割”模式,然后将“after items”放在第2列。最终结果如下:
xxx yyy
xxx zzz
www kkk
www ggg
www yyy
eee ccd

专家能教我如何用 R 来做吗?我从之前的 stackoverflow 消息中了解到,R 可以搜索固定项目(例如剪切)并将它们拆分为不同的单元格。这里的挑战(对我来说)是搜索模式正在改变,“cut”这个词之前的数字对于每个人来说都是不同的。使用 R 在正确的位置搜索和剪切它的最有效方法是什么?

最佳答案

以下适用于您的示例数据:

x <- c("xxx 23 cut", "yyy", "zzz", "www 55 cut", "kkk", "ggg", "yyy", "eee 7 cut", "ccd" )

首先,创建一个 regexgrep 一起使用的模式:以下模式搜索数字 (\d) 后跟一个空格和单词 cut。见 ?regexp?grep详情。
cut_pattern <- "\\d* cut"

cut_positions <- grep(cut_pattern, x)
cut_repeat <- c(cut_positions[-1], length(x) + 1) - cut_positions -1
before_items <- rep(x[cut_positions], times=cut_repeat)
after_items <- x[!grepl(cut_pattern, x)]

data.frame(
before = before_items,
after = after_items
)

结果:
      before after
1 xxx 23 cut yyy
2 xxx 23 cut zzz
3 www 55 cut kkk
4 www 55 cut ggg
5 www 55 cut yyy
6 eee 7 cut ccd

我将把它作为练习留给您清理第 1 列中的数据。提示:使用 str_extract包装内 stringr .你可以引用这个问题: How can I use back references with `grep` in R?有关如何执行此操作的示例。进一步提示,您的模式应该类似于 "(.*) \\d* cut" .

关于r - 如何搜索每次都不完全相同的模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6211130/

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