【问题标题】:How to delete beginning of the string in matrix?如何删除矩阵中字符串的开头?
【发布时间】:2021-04-28 09:11:38
【问题描述】:

让我们考虑以下矩阵:

example_matrix <- matrix(c("group1_A", "group2_B", "C", 
                           "group11_E", "group3_F", "O", 
                           "K", "J", "Letter"), ncol = 3, nrow = 3)

     [,1]       [,2]       [,3]    
[1,] "group1_A" "group11_E" "K"     
[2,] "group2_B" "group3_F" "J"     
[3,] "C"        "O"        "Letter"

我想要做的是删除矩阵元素中前面的"group"(如果存在)。

所以我想结束:

     [,1] [,2] [,3]    
[1,] "A"  "E"  "K"     
[2,] "B"  "F"  "J"     
[3,] "C"  "O"  "Letter"

我的第一个想法是使用代码:

> apply(example_matrix, 2, function(x)  gsub("group\\d_", "", x))
     [,1] [,2]        [,3]    
[1,] "A"  "group11_E" "K"     
[2,] "B"  "F"         "J"     
[3,] "C"  "O"         "Letter"

但是你可以看到其中有"group_11"(代码看不到它,因为“组”后面有两个数字)。如果我要

apply(example_matrix, 2, function(x)  gsub("group\\d\\d_", "", x))

     [,1]       [,2]       [,3]    
[1,] "group1_A" "E"        "K"     
[2,] "group2_B" "group3_F" "J"     
[3,] "C"        "O"        "Letter"

然后它会正确更改group11_,但会留下其他的。

当然我可以在这种情况下做一些事情,但它不是那么优雅的解决方案(如果我有更多的整数呢?例如group11234_

有没有可能简单地做到这一点?

【问题讨论】:

  • 组后数字使用通配符

标签: r string matrix


【解决方案1】:

您可以简单地在\\d 之后使用sub+,并以^ 开头。

sub("^group\\d+_", "", example_matrix)
#     [,1] [,2] [,3]    
#[1,] "A"  "E"  "K"     
#[2,] "B"  "F"  "J"     
#[3,] "C"  "O"  "Letter"

在给定的情况下,删除 _ 之前的所有内容也可以:

sub(".*_", "", example_matrix)
#     [,1] [,2] [,3]    
#[1,] "A"  "E"  "K"     
#[2,] "B"  "F"  "J"     
#[3,] "C"  "O"  "Letter"

【讨论】:

    【解决方案2】:
    apply(example_matrix, 2, function(x)  gsub("group\\d+_", "", x))
    

    【讨论】:

      【解决方案3】:
      apply(example_matrix[], 2, function(x) gsub("^[^A-Z]+", "", x))
      

      【讨论】:

        猜你喜欢
        • 2013-10-30
        • 1970-01-01
        • 1970-01-01
        • 2015-01-28
        • 1970-01-01
        • 2017-07-07
        • 1970-01-01
        • 2011-11-13
        • 2015-02-03
        相关资源
        最近更新 更多