使用R从长字符串中将部分单词提取到字段中

使用R从长字符串中将部分单词提取到字段中,r,grepl,R,Grepl,我有一个带3个OB的长字符串变量。我试图创建一个字段prob来从长字符串中提取特定字符串。代码和消息如下 数据aa:“成为承运人的概率为0.0002422359”“BRCA1承运人为0.0001061067” “BRCA2载体0.00013612” 在这里输入代码 aa$prob这是我的,已更新以反映data.frame 库(dplyr) aa% 变异(prob=as.numeric(if_else(grepl)((概率| BRCA[12]载体)”,aa), gsub(“^.*?\\b([0-9

我有一个带3个OB的长字符串变量。我试图创建一个字段prob来从长字符串中提取特定字符串。代码和消息如下

数据aa:“成为承运人的概率为0.0002422359”“BRCA1承运人为0.0001061067” “BRCA2载体0.00013612”

在这里输入代码 aa$prob这是我的,已更新以反映
data.frame

库(dplyr)
aa%
变异(prob=as.numeric(if_else(grepl)((概率| BRCA[12]载体)”,aa),
gsub(“^.*?\\b([0-9]+\.?[0-9]*)\\s*$”,“\\1”,aa),不带字符)
#aa问题
# 1                                                 ...           NA
# 2                                                 ...           NA
#3作为承运人的概率为0.0002422359 0.0002422359
#4 BRCA1载波0.0001061067 0.0001061067
#5 BRCA2载体0.00013612 0.0001361200
# 6                                                 ...           NA
正则表达式遍历:

  • ^
    $
    分别是字符串的开头和结尾
    \\b
    是单词边界;这些都不会“消耗”任何字符,它们只是标记开头和结尾
  • 表示一个字符
  • 表示“零或一”,也称为可选<代码>*表示“零或更多”<代码>+表示“一个或多个”;均指上一个字符/类/组
  • \\s
    是空白,包括空格和制表符
  • [0-9]
    是一个类,表示0到9之间的任何字符;类似地,
    [a-z]
    都是小写字母,
    [a-zA-z]
    都是字母,
    [0-9A-F]
    都是十六进制数字,等等
  • (…)
    是已保存的组;在一个群体中使用
    |
    作为“或”并不罕见;此组稍后在
    gsub
    replacement=
    部分中用作编号组,因此
    \\1
    从模式中调用第一组
因此,对其进行分组和总结:

“^.*?\\b([0-9]+\\.?[0-9]*)\\s*$”
1         ^^^^^^^^^^^^^^^^^^
2      ^^^
3   ^^^
4                           ^^^^
  • 这是“数字”部分,允许一个或多个数字、一个可选的小数点和零个或多个数字。这将保存在组“1”中
  • 单词boundary保证我们包含前导数字(根据一些情况,
    “12.345”
    可能被解析为
    “2.345”
    ,如果没有它
  • 数字之前的任何内容,如字符串
  • 数字后有空格或没有空格
  • 以有组织的方式逻辑地分组


    Regex不是R所独有的,它是R(和大多数其他编程语言)以某种方式支持的一种解析语言。

    对您的一个问题做了回答(相对相同)不起作用?它完美地从字段中提取数字,您只需将
    添加为.numeric
    。嗨,r2evans,谢谢您的指导。它起作用。我得到了3个值。但在运行代码后不知道数据集中的字段名:Ssub控制台窗口显示:>bb[1]0.0002422359 0.0001061067 0.0001361200对于give me,我从SAS跳到R一周。我有很多概念问题是bb是数据帧名称还是变量名称?这是一个很大的帮助。我是R的初学者。你能解释一下“^.*?\\b([0-9]+\.?[0-9]*)\\s*$,“\\1”的意思吗,在gsub部分?谢谢你,因为你对堆叠网站还不熟悉:慢慢来,不要着急,但是当你觉得一个答案可以解决你的问题时,请。这样做不仅可以给回答者提供一些要点,还可以为有类似问题的读者提供一些结尾。虽然你只能接受一个答案,但你有如你认为有助于提高投票效率(你在回答这个问题之前的答案,请考虑回到他们并接受一些)。再次,不要匆忙。谢谢。对不起,我只看到“积极的”,“最老的”和“投票”。答案旁边的按钮可用。我没有看到“接受”按钮。我也检查了链接,但仍然找不到。对此表示抱歉。我真的想接受它。在该按钮的左侧,您应该看到一个向上/向下的投票者,一个数字(当前为0),下面应该有一个灰色复选标记(因为您是原始海报)。点击该箭头应该会接受。就这么做了。它会说:“感谢您的反馈!记录声誉低于15的人所投的票,但不要更改公开显示的帖子分数。”15'后会检查它,谢谢您的帮助!!!