Fre*_*red 11 string split r vector
限定
z<- as.character(c("1_xx xx xxx_xxxx_12_sep.xls","2_xx xx xxx_xxxx_15_aug.xls"))
Run Code Online (Sandbox Code Playgroud)
这样的
> z
[1] "1_xx xx xxx_xxxx_12_sep.xls" "2_xx xx xxx_xxxx_15_aug.xls"
Run Code Online (Sandbox Code Playgroud)
我想创建一个向量w ^这样
> w
[1] "1_12_sep" "2_15_aug"
Run Code Online (Sandbox Code Playgroud)
也就是说,用_分割z的每个元素然后连接元素1,4,5,从后者中删除.xls.
我可以管理拆分部分,但不确定要提供什么功能,例如"
w <- as.character(lapply(strsplit(z,"_"), function(x) ???))
Run Code Online (Sandbox Code Playgroud)
为此,您可以使用的组合strsplit
,substr
并且lapply
:
y <- strsplit(z,"_",fixed=TRUE)
lapply(y,FUN=function(x){paste(x[1],x[4],substr(x[5],1,3),sep="_")})
Run Code Online (Sandbox Code Playgroud)
在stringr
包中使用一些魔法:我分别提取左右日期字段,合并它们,最后删除.xls
最后一个.
library(stringr)
l <- str_extract(z, "\\d+_")
r <- str_extract(z, "\\d+_\\w*\\.xls")
gsub(".xls", "", paste(l, r, sep=""))
[1] "1_12_sep" "2_15_aug"
Run Code Online (Sandbox Code Playgroud)
str_extract
是一些我觉得更容易使用的基本R函数的包装器.
编辑这里是正则表达式的简短解释:
\\d+
查找一个或多个数字.逃脱以区别于正常角色d.\\w*
查找零个或多个字母数字字符(单词).它再一次逃脱了.\\.
寻找小数点.这需要转义,否则小数点表示任何单个字符.从理论上讲,正则表达式应该非常灵活.它应该为您的日期找到单个或双字符.
一次调用gsub
(以及基于@Andrie的答案的一些正则表达式魔法)可以做到这一点.有关?regexp
我在pattern
和replacement
(反向引用)参数中使用的内容的详细信息,请参阅.
gsub("^(\\d+_).*_(\\d+_\\w*).xls", "\\1\\2", z)
# [1] "1_12_sep" "2_15_aug"
Run Code Online (Sandbox Code Playgroud)