这是我在R上的文件名:
> lst.files[1]
[1] "clt_Amon_CanESM2_rcp45_185001-230012.nc"
我需要做的是捕获直到第4个下划线(包括)的部分,所以它会是这样的:
clt_Amon_CanESM2_rcp45_
我怎样才能在R中找到它?
答案 0 :(得分:2)
使用qdap
包,您可以执行以下操作。
x <- "clt_Amon_CanESM2_rcp45_185001-230012.nc"
library(qdap)
beg2char(x, "_", 4, include = TRUE)
# [1] "clt_Amon_CanESM2_rcp45_"
答案 1 :(得分:2)
如果你知道你总是(至少)有四个下划线,那么你可以这样做:
regmatches(lst, regexec(".*_.*_.*_.*_", lst.files[1]))[[1]]
# [1] "clt_Amon_CanESM2_rcp45_"
如果第二部分可能不总是四个,但没有下划线,你可以这样做:
regmatches(lst, regexec(".*_", lst.files[1]))[[1]]
# [1] "clt_Amon_CanESM2_rcp45_"
这不需要任何额外的包,只需要基础R。
答案 2 :(得分:2)
我们还可以使用sub
将重复模式捕获为一组。我们匹配不是下划线(^
)后跟下划线([^_]+
)的字符串开头(\\_
)的另外一个字符,重复4次({{ 1}}),通过括起括号后跟零个或多个字符({4}
)将其捕获为一个组。我们用捕获组(.*
)替换它以获得预期的输出。
\\1
sub('^(([^_]+\\_){4}).*', '\\1', str1)
#[1] "clt_Amon_CanESM2_rcp45_"