gpt4 book ai didi

regex - 在分隔符上从字符串末尾拆分固定次数

转载 作者:行者123 更新时间:2023-12-01 09:20:07 25 4
gpt4 key购买 nike

我有一个如下的数据框:

df = data.frame(a = 1:4, strings = c('ooss_bboo_foo','ee_bbbbee_fffee','aas_baa_ffaa_daa', 'iisss_bbbbii_ffffii_dii_mii'))

我想在 _ 上拆分,生成新列(或新数据框,并不重要)。可以使用 min(lengths(strsplit(df$strings, "_")))max(lengths(strsplit(df$strings, "_"))) 估计出现次数

期望的输出:

  X1                   X2       X3
1 ooss bboo foo
2 ee bbbbee fffee
3 aas_baa ffaa daa
4 iisss_bbbbii_ffffii dii mii

我已经尝试了许多正则表达式,但我已经很绝望了......

最佳答案

这里有几个可能的解决方案:

1) read.pattern gsubfn 包中的 read.pattern 可以直接生成数据帧结果。没有使用其他包。它使用了一个特别简单的正则表达式。

首先我们创建模式,pat。例如,如果 k3 那么 pat"(.*)_(.*)_(.*)" 。然后,只需运行 read.pattern 即可生成结果 data.frame:

library(gsubfn)

strings <- as.character(df$strings) # ensure it's character, not factor
k <- min(lengths(strsplit(strings, "_"))) # from question

pat <- paste(rep("(.*)", k), collapse = "_")
read.pattern(text = strings, pattern = pat, as.is = TRUE)

给予:

                   V1     V2    V3
1 ooss bboo foo
2 ee bbbbee fffee
3 aas_baa ffaa daa
4 iisss_bbbbii_ffffii dii mii

2) sub/read.table。相对于先前的解决方案,该解决方案涉及一个额外的步骤(sub/repl 部分);但是,它根本不使用任何软件包。它利用了上面的 stringskpat。在 k 等于 3 的情况下,repl 的值将是 "\\1,\\2,\\3"

repl <- paste(paste0("\\", 1:k), collapse = ",")
read.table(text = sub(pat, repl, strings), sep = ",", as.is = TRUE)

给出相同的结果。 "," 的两个实例可以替换为数据中未找到的任何字符。

注意:在上述解决方案中,我们使用 as.is = TRUE 使输出列变为字符,但如果 factor 是 OK 则可以省略此参数。

关于regex - 在分隔符上从字符串末尾拆分固定次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34858396/

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