Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 从基中从字符向量中提取正则表达式匹配_Regex_R - Fatal编程技术网

Regex 从基中从字符向量中提取正则表达式匹配

Regex 从基中从字符向量中提取正则表达式匹配,regex,r,Regex,R,假设我有一个字符向量测试: test = c("2014-03-02","2012-09-08","2010-12-11") 我希望结果是数字形式的年数,如下所示: c(2014,2012,2010) 如何以“简单”的方式完成此任务?目前,以下方法很好,但不是很“漂亮”: test = c("2014-03-02","2012-09-08","2010-12-11") tmp = strsplit(test,split="-") myYears = as.numeric(unl

假设我有一个字符向量测试:

test = c("2014-03-02","2012-09-08","2010-12-11")
我希望结果是数字形式的年数,如下所示:

c(2014,2012,2010)
如何以“简单”的方式完成此任务?目前,以下方法很好,但不是很“漂亮”:

test    = c("2014-03-02","2012-09-08","2010-12-11")
tmp     = strsplit(test,split="-")
myYears = as.numeric(unlist(lapply(tmp, function(x) x[[1]])))

我确信这可以通过不同的方式使用regex“\d{4}”以某种方式完成。

您可以使用
sub
函数。只需用空字符串替换从第一个
-
到最后一个的所有字符

> test = c("2014-03-02","2012-09-08","2010-12-11")
> sub("-.*", "", test)
[1] "2014" "2012" "2010"
> as.numeric(sub("-.*", "", test))
[1] 2014 2012 2010

您可以使用
sub
功能。只需用空字符串替换从第一个
-
到最后一个的所有字符

> test = c("2014-03-02","2012-09-08","2010-12-11")
> sub("-.*", "", test)
[1] "2014" "2012" "2010"
> as.numeric(sub("-.*", "", test))
[1] 2014 2012 2010

为什么不只做以下几点,它可以在一行中完成您正在做的所有事情:

as.numeric(sapply(strsplit(test, "-"), '[', 1))

这是1。使用-2拆分向量。选择第一项并将其简化为向量3。将其转换为数字

为什么不只执行以下操作,即可在一行中完成所有操作:

as.numeric(sapply(strsplit(test, "-"), '[', 1))
这是1。使用-2拆分向量。选择第一项并将其简化为向量3。将其转换为数字

您可以尝试:

as.numeric(substr(test,1,4))
或:

另一种选择:

as.numeric(strftime(test,format="%Y"))
或:

你可以试试:

as.numeric(substr(test,1,4))
或:

另一种选择:

as.numeric(strftime(test,format="%Y"))
或:

test=c(“2014-03-02”、“2012-09-08”、“2010-12-11”)
年份
test=c(“2014-03-02”、“2012-09-08”、“2010-12-11”)

年份即使您要求提供
base R
解决方案,我只想让您知道,有一种非常简单的方法可以使用函数
year
直接将年份提取为
numeric

test=c(“2014-03-02”、“2012-09-08”、“2010-12-11”)
图书馆(lubridate)

年份测试即使您要求使用
base R
解决方案,我只是想让您知道,有一种非常简单的方法可以使用函数
year
直接将年份提取为
numeric

test=c(“2014-03-02”、“2012-09-08”、“2010-12-11”)
图书馆(lubridate)

年考我在上得到“此网页不可用”link@AvinashRajThanx很多:)是否有一个在线站点可以运行此功能,或者在您的系统上运行此功能?我得到“此网页不可用”在…上link@AvinashRajThanx很多:)是否有一个在线网站,你可以运行这个或你的系统上有它?也许一个解释会有帮助?嗨@BenBlack我在我的答案中添加了解释检查它也许一个解释会有帮助?嗨@BenBlack我在我的答案中添加了解释检查它
test = c("2014-03-02","2012-09-08","2010-12-11")

library(lubridate)    
year_test <- year(test)

year_test
#[1] 2014 2012 2010
is.numeric(year_test)
# [1] TRUE