在rownames中替换和删除部分字符串

时间:2016-10-06 13:19:39

标签: r

我想删除数据框中的部分rownames。我想删除与下面的grepl中定义的字符串不匹配的所有内容,并将其替换为后面定义的字符串。有谁知道吗?

df[grepl(".*lncRNA.*|.*snRNA.*|.*snoRNA.*|.*precursor_RNA.*", rownames(df))] <- c("lncRNA","snRNA","snoRNA","precursor_RNA")



head(rownames(df))

[3208] "URS000075AF9C-snoRNA_GTATGTGTGGACAGCACTGAGACTGAGTCT"                
[3209] "URS000075B029-snRNA_AACTCTGAGTCTTAAGCTAATTTTTTGAGGCCTTGTTCCGACA"    
[3210] "URS000075B029-snRNA_ATTTCCGTGGAGAGGAACAACTCTGAGTCTTAAGCTAATTT"      
[3211] "URS000075B0E3-lncRNA_GTAAGGGGCAGTAAG"                               
[3212] "URS000075B261-precursor_RNA_CTTTCTATGCTCCTGTTCTGC"                  
[3213] "URS000075B2ED-lncRNA_CACTCAGGACCCACC"

[3208] "snoRNA"                
[3209] "snRNA"    
[3210] "snRNA"      
[3211] "lncRNA"                               
[3212] "precursor_RNA"                  
[3213] "lncRNA" 

2 个答案:

答案 0 :(得分:4)

我们可以使用gsub来匹配字符串的开头(-)之后不是[^-]+^)的一个或多个字符,后跟一个{ {1}}或(-)一个或多个不是下划线(|)的字符,直到字符串结尾([^_]+)并将其替换为空格({{1} }})。

$

如果我们在rownames上执行此操作

""

数据

gsub("^[^-]+-|_[^_]+$", "", v1)
#[1] "snoRNA"        "snRNA"         "snRNA"         "lncRNA"       
#[5] "precursor_RNA" "lncRNA"  

答案 1 :(得分:4)

欢迎使用StackOverflow!您已经为我们提供了一些示例输入和输出,但请考虑提供reproducible example以便我们更方便地为您提供帮助。

在您的情况下,我认为您可以使用"runtimes": { "debian.8-x64" : {} }, ,捕捉中间,以及替换中的;WITH CTE AS ( SELECT 1 AS ANCHOR UNION ALL SELECT A.ANCHOR +1 FROM CTE A ) SELECT TOP 100 CONCAT('a',RIGHT(CONCAT('00000',ANCHOR),6)) AS RecurrenceValue FROM CTE OPTION (MAXRECURSION 0)

sub

Rownames必须是唯一的,因此您可能需要将结果存储在数据框的一列中(或者您可以使用\1使其唯一,但我认为将结果保存为列中的你的数据框会更有意义。)