R中的正则表达式删除第一个空格之后的所有字符?
我有R数据,可以是这样的:R中的正则表达式删除第一个空格之后的所有字符?
USDZAR Curncy
R157 Govt
SPX Index
换句话说,一个字,在这种情况下彭博安全标识符,后跟另一个字,它是安全类,用空格隔开。我想剥离类和空间去:
USDZAR
R157
SPX
什么是在R中这样做的最有效的方式?它是正则表达式还是我必须做一些事情,就像我在MS Excel中使用mid和find命令一样?例如,在Excel中,我会说:
=MID(@REF, 1, FIND(" ", @REF, 1)-1)
这意味着返回一个字符串开始字符1,并在第一空间的字符数结束(少1抹去实际空间)。
我是否需要在R中做类似的事情(在这种情况下,什么是等价的),或者正则表达式可以在这里帮助吗?谢谢。
1)尝试这其中的正则表达式的空间,随后通过任意的字符序列,并sub
匹配替换与具有零个字符的字符串:
x <- c("USDZAR Curncy", "R157 Govt", "SPX Index")
sub(" .*", "", x)
## [1] "USDZAR" "R157" "SPX"
2)一种替代,如果你想数据帧中单独列中的两个单词如下所示。这里as.is = TRUE
使列成为字符而不是因数。
read.table(text = x, as.is = TRUE)
## V1 V2
## 1 USDZAR Curncy
## 2 R157 Govt
## 3 SPX Index
正则表达式将搜索:
\x20.*
,并用一个空字符串替换。
如果你想知道它是否更快,只是时间它。
谢谢,右所以我打字:( “\ X20 *”, “R157官立”)> grep和我找回:[1] 1,即价值1.我从哪里去? – 2011-06-04 23:42:09
这种类型的正则表达式不适用于R. – 2011-06-05 00:13:04
该用法的问题是,您无法理解反斜杠在正则表达式中是特殊的,因此需要自行“逃脱”。在模式参数中需要有两个baackslashes。试试:'sub(“\\\ x20。*”,“”,“R157 Govt”)' – 2012-01-06 13:52:35
如果你像我一样,在正则表达式的将永远是一个高深莫测,令人沮丧的神秘面纱,这个笨重的解决方案也存在:
x <- c("USDZAR Curncy", "R157 Govt", "SPX Index")
unlist(lapply(strsplit(x," ",fixed=TRUE),"[",1))
固定= TRUE不是绝对必要的,只是指出你可以做到这一点(简单情况下),而不是真正了解有关正则表达式的第一件事。
编辑以反映@ Wojciech的评论。
哈哈是的 - 谢谢乔兰。 Clunk风格是我在Excel中习惯的,因此我想知道我是否应该(最终)学习正则表达式。 – 2011-06-05 01:27:41
匿名函数在这里没有必要,所以你可以简化为unlist(lapply(strsplit(x,“”,fixed = TRUE),“[”,1))。 – 2011-06-05 08:03:17
谢谢@Wojciech,我会相应地编辑... – joran 2011-06-05 13:49:05
这是很容易与stringr
:
x <- c("USDZAR Curncy", "R157 Govt", "SPX Index")
library(stringr)
str_split_fixed(x, " ", n = 2)[, 1]
非常感谢你。 – 2011-06-04 23:53:20