让我们考虑下面的矩阵:
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" (代码看不到它,因为“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_)
有没有可能简单地做到这一点?
发布于 2021-04-28 17:18:10
您可以简单地使用sub,在\\d之后使用+,并以^开头。
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"发布于 2021-04-28 17:18:18
apply(example_matrix, 2, function(x) gsub("group\\d+_", "", x))发布于 2021-04-28 17:22:31
apply(example_matrix[], 2, function(x) gsub("^[^A-Z]+", "", x))https://stackoverflow.com/questions/67297227
复制相似问题