我在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中做类似的事情(在这种情况下,等价物是什么),或者正则表达式可以帮助吗?感谢。
答案 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.*
并替换为空字符串。
如果你想知道它是否更快,只需要时间。