如何删除矩阵中字符串的开头? 让我们考虑矩阵跟随: 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"

如何删除矩阵中字符串的开头? 让我们考虑矩阵跟随: 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",r,string,matrix,R,String,Matrix,我的第一个想法是使用代码: > apply(example_matrix, 2, function(x) gsub("group\\d_", "", x)) [,1] [,2] [,3] [1,] "A" "group11_E" "K" [2,] "B" "F" "J"

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

> 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”
(代码没有看到它,因为“group”后面有两个数字)。如果我愿意

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
,但是会留下其他的

当然,对于这种情况,我可以做一些if,但是这不是一个很好的解决方案(如果我有更多的整数怎么办?例如,
group11234


是否可以简单地执行此操作?

您可以简单地在
\\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"

您只需在
\\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"

组后数字使用通配符组后数字使用通配符
apply(example_matrix[], 2, function(x) gsub("^[^A-Z]+", "", x))