我的数据格式为字符向量:
"2014-03-27 11:42:32" "2014-04-03 07:13:28" "0000-00-00 00:00:00" "2012-04-16 12:46:03"
[5] "0000-00-00 00:00:00" "0000-00-00 00:00:00" "2014-04-23 09:33:23" "2014-04-30 06:31:54"[9] "2012-04-18 09:55:44" "2013-11-20 14:43:11"
我想要做的是使用一年中的单个数字。 I.E. 2014年的4分,2013年的3分,2012年的2分和0000-00的1分...除了代表年份的单个数字,我想删除所有其他数字和字符。
我知道我可以使用正则表达式和gsub(pattern="2014", replacement="4", logVector)
或某些变体来完成我的任务,但我并不精通正则表达式。是否有人能够提供语法方面的帮助?
答案 0 :(得分:7)
这就是你需要的:
sub("^\\d{3}(\\d).*", "\\1", subject, perl=TRUE);
我们需要捕获一年中的最后一位数字,然后用该数字替换整个字符串。
<强>解释强>
^
锚点断言我们位于字符串的开头\d{3}
匹配三位数字(\d)
匹配第四位数字并将其捕获到第1组.*
匹配字符串\1
将整个字符串替换为第1组,即最后一位数。答案 1 :(得分:2)
这是您正在寻找的模式:
gsub("^2014.*", "4", data)
这个版本更广泛,将用2011年到2019年的相应数字替换年份,但您需要运行第二行来处理0000案例。
gsub("^201([1-9]).*", "\\1", data)
gsub("^0000.*", "0", data)
答案 2 :(得分:1)
除了
之外,您还可以使用?substr提取第4个字符substr(data,4,4)
# [1] "4" "4" "0" "2" "0" "0" "4" "4" "2" "3"
或
library(stringr)
str_extract(data, perl('(?<=\\d{3})\\d'))
#[1] "4" "4" "0" "2" "0" "0" "4" "4" "2" "3"
(?<=\\d{3}) # look behind for three digits
\\d # followed by the digit that needs to be extracted
假设你想要几个月:
str_extract(data, perl('(?<=\\d{4}-)\\d{2}')) #look behind 4 digits followed by `-`
#[1] "03" "04" "00" "04" "00" "00" "04" "04" "04" "11"