检查向量是否以数字开头

时间:2018-08-17 08:48:36

标签: r substring quotations

我有一个很简单的问题。抱歉,是否已经有人问过这个问题,但是我找不到答案... 我想检查基因名称是否以数字开头,如果确实以数字开头,我想在基因名称中添加“ aaa_”。为此,我使用了以下代码:

geneName <- "2310067B10Rik"
if (is.numeric(substring(geneName, 1, 1))) {
  geneName <<- paste("aaaa_", geneName, sep="")
}

我想找回的是aaaa_2310067B10Rik。但是,is.numeric返回FALSE,因为子字符串的引号中的字符为“ 2”。我也尝试使用noquote(),但是在子字符串周围使用as.numeric()无效,但是随后还将if代码应用于不以数字开头的基因。有什么建议么?谢谢!

5 个答案:

答案 0 :(得分:4)

以下是使用正则表达式(Learning Regular Expressions)的解决方案:

geneName <- c("2310067B10Rik", "Z310067B10Rik")
sub("^(\\d)", "aaa_\\1", geneName)

或作为PERL风格的变体(表示@snoram):

sub("^(?=\\d)", "aaa_", geneName, perl = TRUE)

答案 1 :(得分:1)

使用<ItemsControl ItemsSource="{Binding Parcels}"> </ItemsControl.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Horizontal" Background="Violet"/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> </ItemsControl> 函数:

replace()

位置:

start_nr <- grep("^\\d", geneName)
replace(geneName, start_nr, paste0("aaaa_", geneName[start_nr]))
[1] "aaaa_2310067B10Rik" "foo"                "aaaa_9bar"  

答案 2 :(得分:0)

geneName <- c("2310067B10Rik", "foo") 

ifelse(substring(geneName, 1,1) %in% c(0:9), paste0("aaaa_", geneName), geneName)

[1] "aaaa_2310067B10Rik" "foo"  

或者根据以上评论,您可以将substring(geneName, 1,1) %in% c(0:9)替换为grepl("^\\d", geneName)

答案 3 :(得分:0)

使用regex

您可以先检查geneName的第一个字符,如果它是数字,则可以按如下所示追加:

geneName <- "2310067B10Rik"
ifelse(grepl("^[0-9]*$", substring(geneName, 1,1)),paste("aaaa",geneName,sep="_"),)

输出:

[1] "aaaa_2310067B10Rik"

答案 4 :(得分:0)

 geneName=function(x){
   if( grepl("^[0-9]",x) ){
     as.character(glue::glue('aaaa_{x}'))
   }else{x}
 }
> geneName("2310067B10Rik")
[1] "aaaa_2310067B10Rik"
> geneName("sdsad")
[1] "sdsad"