R 拆分向量,按正则表达式分类

R 拆分向量,按正则表达式分类,r,R,我正在寻找一种基于正则表达式模式分割字符向量的方法 输入示例: input <- c("a_foo","b_foo", "c_bar", "d_bar") split_by <- c("foo", "bar") 编辑 根据评论和回答,需要澄清 split_by可以有任意数量的元素 正则表达式模式因情况而异;及 根据匹配情况,input中的元素可以分配给0(无匹配

我正在寻找一种基于正则表达式模式分割字符向量的方法

输入示例:

input <- c("a_foo","b_foo", "c_bar", "d_bar")
split_by <- c("foo", "bar")

编辑

根据评论和回答,需要澄清

  • split_by
    可以有任意数量的元素
  • 正则表达式模式因情况而异;及
  • 根据匹配情况,
    input
    中的元素可以分配给0(无匹配)、1或多个拆分
  • 因此,以下输入:

    input <- c("foo_bar", "nothing", "a_foo", "c_bar")
    split_by <- c("foo", "bar")
    
    我们得到了预期的结果:

    $foo
    [1] "a_foo" "b_foo"
    
    $bar
    [1] "c_bar" "d_bar"
    
    $foo
    [1] "foo_bar" "a_foo"  
    
    $bar
    [1] "foo_bar" "c_bar" 
    
    第二个示例

    通过定义问题第二个示例中的
    input
    split_By
    ,然后运行:

    split.regex(input=input, split_by=split_by, pattern="%s$", add_names=TRUE)
    
    split.regex(input=input, split_by=split_by, pattern="(%s)", add_names=TRUE)
    
    我们得到了预期的结果:

    $foo
    [1] "a_foo" "b_foo"
    
    $bar
    [1] "c_bar" "d_bar"
    
    $foo
    [1] "foo_bar" "a_foo"  
    
    $bar
    [1] "foo_bar" "c_bar" 
    
    由于输入
    “nothing”
    在任何上都不匹配,因此它被正确地从拆分中排除,而
    “foo_bar”
    被正确地添加到两个拆分中,因为它在两个拆分中都匹配

    我们得到了预期的结果:

    $foo
    [1] "a_foo" "b_foo"
    
    $bar
    [1] "c_bar" "d_bar"
    
    $foo
    [1] "foo_bar" "a_foo"  
    
    $bar
    [1] "foo_bar" "c_bar" 
    
    第二个示例

    通过定义问题第二个示例中的
    input
    split_By
    ,然后运行:

    split.regex(input=input, split_by=split_by, pattern="%s$", add_names=TRUE)
    
    split.regex(input=input, split_by=split_by, pattern="(%s)", add_names=TRUE)
    
    我们得到了预期的结果:

    $foo
    [1] "a_foo" "b_foo"
    
    $bar
    [1] "c_bar" "d_bar"
    
    $foo
    [1] "foo_bar" "a_foo"  
    
    $bar
    [1] "foo_bar" "c_bar" 
    

    由于输入
    “nothing”
    在任何上都不匹配,因此它被正确地从拆分中排除,而
    “foo_bar”
    被正确地添加到两个拆分中,因为它在两个拆分中都匹配。

    在实际情况下,您能否从
    输入
    数据中提取
    拆分值

    这适用于共享的示例

    split(input, sub('.*_', '', input))
    
    #$bar
    #[1] "c_bar" "d_bar"
    
    #$foo
    #[1] "a_foo" "b_foo"
    
    在哪里


    在实际情况下,您是否可以从
    输入数据中提取
    分割的值

    这适用于共享的示例

    split(input, sub('.*_', '', input))
    
    #$bar
    #[1] "c_bar" "d_bar"
    
    #$foo
    #[1] "a_foo" "b_foo"
    
    在哪里

    要获得命名输出,可以执行以下操作:

    lapply(setNames(split_by, split_by), grep, x = input, value = TRUE)
    
    要获得命名输出,可以执行以下操作:

    lapply(setNames(split_by, split_by), grep, x = input, value = TRUE)
    

    split\u by
    是否可以包含2个以上的元素?@sindri\u baldur请查看更新的问题。
    split\u by
    是否可以包含2个以上的元素?@sindri\u baldur请查看更新的问题。@A5C1D2H2I1M1N2O1R2T1很好@A5C1D2H2I1M1N2O1R2T1很好!