我有一个带有以下信息的载体:
"CCP--TODAS(00)--MAMOLGUR (20151015)-**16**.txt"
"CCP--TODAS(00)--MAMOLGUR (20151015)-**4**.txt"
正如我们所看到的,向量中的这两个元素都有数字和字符,所以我想要做的是获得最大数字(只有粗体数字),元素结构不会改变,只是数字会改变
任何人都知道如何解决这个问题?
此示例的结果应为16。
答案 0 :(得分:0)
如果@ gopala的解释是正确的,并且您想要.txt之前的最大数字,则以下gsub
函数会将其解除:
temp <- c("CCP--TODAS(00)--MAMOLGUR (20151015)-16.txt",
"CCP--TODAS(00)--MAMOLGUR (20151015)-4.txt")
max(as.numeric(gsub("^.*-([0-9]+)\\.txt$", "\\1", temp)))
以下是解决方案的组成部分:
max
功能不言自明as.numeric
将一个参数(通常是一个向量)强制转换为数字类型,我们将其输入max
。解决方案的内容是gsub
,它采用正则表达式(她,&#34; ^。* - ([0-9] +)\ .txt $&#34;),a替换字符串(此处为&#34; \ 1&#34;)和字符串向量。
正则表达式&#34; ^。 - ([0-9] +)\。txt $&#34;说&#34; ^&#34;从一开始,&#34;。&#34;匹配任何东西到&#34; - &#34;一个连字符。 &#34;()&#34;捕获[0-9] +数字,0到9,完全匹配&#34; .txt&#34;最后&#34; $&#34;。 &#34; \&#34;是一个逃脱,并告诉正则表达式引擎治疗&#34;。&#34;作为文字点,而不是开头的任何字符。
替换&#34; \ 1&#34;说返回第一个被捕获的&#34;()&#34;子表达式,这是我们的数字,&#34; [0-9] +&#34;。
正则表达式是许多软件中可用的神奇工具,这是我最喜欢的regex site。
如果向量包含的元素与模式不匹配,并且您想忽略它们,则可以将na.rm参数添加到max
,如下所示:
temp <- c("CCP--TODAS(00)--MAMOLGUR (20151015)-16.txt",
"CCP--TODAS(00)--MAMOLGUR (20151015)-4.txt",
"PPS--TODAS--MAMOLGUR 20151128-116 -Cuba y San Jose")
max(as.numeric(gsub("^.*-([0-9]+)\\.txt$", "\\1", temp)), na.rm=T)
这会产生关于缺失值的警告,但仍会返回正确答案。