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 
+0

非常感谢你。 – 2011-06-04 23:53:20

正则表达式将搜索:

\x20.* 

,并用一个空字符串替换。

如果你想知道它是否更快,只是时间它。

+0

谢谢,右所以我打字:( “\ X20 *”, “R157官立”)> grep和我找回:[1] 1,即价值1.我从哪里去? – 2011-06-04 23:42:09

+0

这种类型的正则表达式不适用于R. – 2011-06-05 00:13:04

+0

该用法的问题是,您无法理解反斜杠在正则表达式中是特殊的,因此需要自行“逃脱”。在模式参数中需要有两个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的评论。

+0

哈哈是的 - 谢谢乔兰。 Clunk风格是我在Excel中习惯的,因此我想知道我是否应该(最终)学习正则表达式。 – 2011-06-05 01:27:41

+0

匿名函数在这里没有必要,所以你可以简化为unlist(lapply(strsplit(x,“”,fixed = TRUE),“[”,1))。 – 2011-06-05 08:03:17

+0

谢谢@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]