在rownames中匹配匹配行

时间:2017-04-04 12:36:54

标签: r

我正在尝试删除rowname第三部分中没有0的所有行。为什么我的代码不起作用?

idx <- which(read.table(text=rownames(miraligner_Nov_s2))$V3=="0")
miraligner_Nov_s2MM <- miraligner_Nov_s2[-idx] 

> head(miraligner_Nov_s2)
                                                      freq
hsa-miR-183-5p TATTGCACTGGTAGAATTCACTGAA 4TG I-AA 0 G    1
hsa-miR-21-3p CAACACCAGTCGATGGGCTGAT 0 I-AT 0 t          1
hsa-miR-22-3p AAGCTGACAGTTGAAGAACTGA 7AC I-A 0 t         5
hsa-miR-769-5p TGAGACCTCTGGGTTCCGAGCT 17CT 0 0 0         1
hsa-miR-429 TAATACTGTCGGGTAAAACCGT 11GT 0 0 0            1
hsa-miR-148b-5p GAGTTCTGTTATACACTCAGGCT 1GA 0 0 T        1

2 个答案:

答案 0 :(得分:0)

正如评论中所阐明的那样,行名称的第三部分涉及由空格分隔的第三个文本块。在这种情况下,regex&#34; [^] + [^] + 0&#34;应该管用。所以

df[!grepl("^[^ ]+ [^ ]+ 0", row.names(df)),] 

将返回data.frame,其中0在第二个空格后立即出现。同样,您可以使用grep之类的

df[grep("^[^ ]+ [^ ]+ 0", row.names(df), invert=TRUE),]

将返回相同的结果。

其他正则表达式变体

  • &#34; ^ \\ S + \\小号\\ S + \\ S0&#34;
  • &#34; ^ \\ S + \\ S + 0&#34;

答案 1 :(得分:0)

使用dplyr和tidyr,你可以这样做:

library(dplyr) library(tidyr) miraligner_Nov_s2 %>% rownames_to_column() %>% separate(col=rowname, sep = " ", into=paste0("col", as.character(1:6))) %>% filter(col3 != 0)