使用GSUB提取之前R中
问题描述:
空白字符串我的生日,看起来像这样的列表:使用GSUB提取之前R中
dob <- c("9/9/43 12:00 AM/PM", "9/17/88 12:00 AM/PM", "11/21/48 12:00 AM/PM")
我只想抓住从这个变量的日历日期(即后放下一切第一次出现空白)。
这是我迄今为止尝试:
dob.abridged <- substring(dob,1,8)
dob
[1] "9/9/43 1" "9/17/88 " "11/21/48"
dob.abridged <- gsub(" $","", dob.abridged, perl=T)
> dob.abridged
[1] "9/9/43 1" "9/17/88" "11/21/48"
所以我的代码适用于长度为6或7的日历日期,而不是长度8.更有效的正则表达式的任何指针与GSUB可使用处理长度为6,7或8的日历日期?
谢谢。
答
我经常用strsplit
来解决这类问题,但是很喜欢罗曼的答案是多么的简单。我认为罗曼的解决方案比作一个strsplit
答案会很有意思:
这里有一个strsplit
解决方案:
sapply(strsplit(dob, "\\s+"), "[", 1)
使用微基准测试包和dob <- rep(dob, 1000)
与原始数据:
Unit: milliseconds
expr min lq median
gsub(" .*$", "", dob) 4.228843 4.247969 4.258232
sapply(strsplit(dob, "\\\\s+"), "[", 1) 14.438241 14.558832 14.634638
uq max neval
4.268029 5.081608 1000
14.756628 53.344984 1000
的Win 7机器上的明确赢家是来自Romain的gsub
正则表达式。感谢罗曼的回答和解释。
答
库stringr
包含一个适合此问题的函数。
library(stringr)
word(dob,1)
# [1] "9/9/43" "9/17/88" "11/21/48"
我可以在这里分享的唯一建议是'sub'就够了,因为只有一个字符串结束位置。 – 2016-10-12 21:50:25