R中的正则表达式擦除第一个空格后的所有字符?

时间:2011-06-04 23:33:11

标签: regex r

我在R中的数据看起来像这样:

USDZAR Curncy
R157 Govt
SPX Index

换句话说,一个词,在这种情况下是一个彭博安全标识符,后跟另一个词,即安全类,用空格分隔。我想剥离课程和空间去:

USDZAR
R157
SPX

在R中执行此操作的最有效方法是什么?它是正则表达式还是我必须像使用mid和find命令在MS Excel中那样做?例如在Excel中我会说:

=MID(@REF, 1, FIND(" ", @REF, 1)-1)

表示返回从字符1开始的子字符串,并以第一个空格的字符编号结束(少于1以擦除实际空间)。

我是否需要在R中做类似的事情(在这种情况下,等价物是什么),或者正则表达式可以帮助吗?感谢。

4 个答案:

答案 0 :(得分:23)

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

答案 1 :(得分:4)

使用stringr非常容易:

x <- c("USDZAR Curncy", "R157 Govt", "SPX Index")

library(stringr)
str_split_fixed(x, " ", n = 2)[, 1]

答案 2 :(得分:2)

如果你像我一样,那个正则表达式将永远是一个难以理解,令人沮丧的谜团,这个笨重的解决方案也存在:

x <- c("USDZAR Curncy", "R157 Govt", "SPX Index")
unlist(lapply(strsplit(x," ",fixed=TRUE),"[",1))

fixed = TRUE并不是绝对必要的,只是指出你可以这样做(简单的情况)w / out真的知道关于regexp的第一件事。

编辑反映@ Wojciech的评论。

答案 3 :(得分:1)

正则表达式将是搜索:

\x20.*

并替换为空字符串。

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