我列出了900个这样的名字:
我想知道有多少个miR在序列的最后一个点之前具有“ 0”。我尝试了grep和gsub的不同组合(以删除最后一个点后的字母/数字),但是由于末尾字母的长度可变,我无法解决。感谢您的帮助。
预期输出为:
答案 0 :(得分:1)
names <- c("miR.30a.5p.11TC.0.0.0",
"miR.30a.5p.0.G.0.ag",
"miR.21.5p.0.A.0.tga",
"miR.30a.3p.0.TA.c.c",
"miR.30a.5p.11TC.0.0",
"miR.30a.5p.0.G.0")
filt <- unlist(lapply(lapply(strsplit(names, ".", fixed=T), rev), "[[", 2)) == "0" # boolean vector with TRUE where
sum(filt) # nb of files with zeros as second last element
最好, 克里斯
答案 1 :(得分:0)
基于R的想法
sum(sapply(x, function(i){i1 <- strsplit(i, '.', fixed = TRUE)[[1]];
i1[(length(i1)) - 1] == 0}))
#[1] 3
或使用stringr
包
#For the sum,
sum(stringr::word(x, -2, sep = '\\.') == 0)
#[1] 3
#For trimming
stringr::word(x, 1, -2, sep = '\\.')
#[1] "miR.30a.5p.11TC.0.0" "miR.30a.5p.0.G.0" "miR.21.5p.0.A.0" "miR.30a.3p.0.TA.c"
数据
x <- c('miR.30a.5p.11TC.0.0.0',
'miR.30a.5p.0.G.0.ag',
'miR.21.5p.0.A.0.tga',
'miR.30a.3p.0.TA.c.c')
答案 2 :(得分:0)
sum(gsub('.*\\.(.*)\\..*','\\1',x)==0)
[1] 3
.*
任意数量的字符,也可能包含点
\\.
文字点
(.*)
组,任意数量的字符。我们将使用\\1
将该小组归还
\\..*
文字点“最后一个点”后跟任意数量的字符