我正在尝试删除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
答案 0 :(得分:0)
正如评论中所阐明的那样,行名称的第三部分涉及由空格分隔的第三个文本块。在这种情况下,regex&#34; [^] + [^] + 0&#34;应该管用。所以
df[!grepl("^[^ ]+ [^ ]+ 0", row.names(df)),]
将返回data.frame,其中0在第二个空格后立即出现。同样,您可以使用grep
之类的
df[grep("^[^ ]+ [^ ]+ 0", row.names(df), invert=TRUE),]
将返回相同的结果。
其他正则表达式变体
答案 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)