gpt4 book ai didi

r - 在 R 中拆分和提取字符串的一部分(在 "."和数字之间)

转载 作者:行者123 更新时间:2023-12-04 17:19:41 27 4
gpt4 key购买 nike

我有一个字符变量( companies ),其观察结果如下所示:

  • "612. Grt. Am. Mgt. & Inv. 7.33"
  • “77. 威克斯 4.61”
  • 《265.王实验室8.75》
  • “9. CrossLand Savings 6.32”
  • 《228.JPS纺织集团2.00》

  • 我正在尝试将这些字符串分成 3 部分:
  • 第一个 "." 之前的所有数字,
  • 第一个 "." 之间的所有内容和下一个数字
    (一致的格式 #.## )和
  • 最后一个数字本身
    (格式 #.##)。

  • 以第一个 obs 为例,我想:“612”、“Grt. Am. Mgt & Inv”、“5.01”

    我尝试在 rebus 中定义模式并使用 str_match ,但下面的代码仅适用于像 obs #2 和 #3 这样的情况。它不能反射(reflect)字符串中间部分的所有变化来捕获其他 obs。
    pattern2 <- capture(one_or_more(DGT)) %R% DOT %R% SPC %R% 
    capture(or(one_or_more(WRD), one_or_more(WRD) %R% SPC
    %R% one_or_more(WRD))) %R% SPC %R% capture(DGT %R% DOT
    %R% one_or_more(DGT))

    str_match(companies, pattern = pattern2)

    有没有更好的方法将字符串分成这 3 个部分?

    我不熟悉 regex ,但我在这里看到了很多建议(我是 R 和 Stack Overflow 的新手)

    最佳答案

    您可以使用正则表达式分隔字符串,然后拆分该字符串以获得结果:

    delimitedString = gsub( "^([0-9]+). (.*) ([0-9.]+)$", "\\1,\\2,\\3", companies  )

    do.call( 'rbind', strsplit(split = ",", x = delimitedString) )
    # [,1] [,2] [,3]
    #[1,] "612" "Grt. Am. Mgt. & Inv." "7.33"
    #[2,] "77" "Wickes" "4.61"
    #[3,] "265" "Wang Labs" "8.75"
    #[4,] "9" "CrossLand Savings" "6.32"
    #[5,] "228" "JPS Textile Group" "2.00"

    正则表达式解释 :
  • ^[0-9]+ : 字符串
  • 开头(即 ^ )由 0 到 9 的数字组成的任何模式
  • .* : 贪心匹配,基本上是上面案例中被两个空格包围的任何东西
  • [0-9.]+$ :再次数字+一个点,并在您的字符串
  • 的结尾(即 $)

    括号用于表示我想捕捉那些由正则表达式拟合的字符串部分。捕获它们后,这些子字符串将折叠并用逗号分隔。最后,我们可以用 strsplit 分割整个字符串。使用 do.call 函数和绑定(bind)行功能

    关于r - 在 R 中拆分和提取字符串的一部分(在 "."和数字之间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54759011/

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