Регулярные выражения в R, чтобы стереть все символы после первого пробела?
У меня есть данные в R, которые могут выглядеть так:
USDZAR Curncy
R157 Govt
SPX Index
Другими словами, одно слово, в данном случае - идентификатор безопасности Bloomberg, за которым следует другое слово, которое является классом безопасности, разделенным пробелом. Я хочу разделить класс и пространство, чтобы добраться до:
USDZAR
R157
SPX
Какой самый эффективный способ сделать это в R? Является ли это регулярными выражениями или я должен что-то делать, как в MS Excel, используя команды mid и find? например, в Excel, я бы сказал:
=MID(@REF, 1, FIND(" ", @REF, 1)-1)
что означает возврат подстроки, начинающейся с символа 1, и завершение символьного номера первого пространства (меньше 1 для удаления фактического пространства).
Нужно ли мне делать что-то подобное в R (в этом случае, что эквивалентно), или могут помочь регулярные выражения? Спасибо.
Ответы
Ответ 1
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
Ответ 2
Это довольно легко с stringr
:
x <- c("USDZAR Curncy", "R157 Govt", "SPX Index")
library(stringr)
str_split_fixed(x, " ", n = 2)[, 1]
Ответ 3
Если вы похожи на меня, то в этом регулярном выражении всегда останется неисповедимая, расстраивающая тайна, это бесстыдное решение также существует:
x <- c("USDZAR Curncy", "R157 Govt", "SPX Index")
unlist(lapply(strsplit(x," ",fixed=TRUE),"[",1))
Фиксированный = ИСТИНА не является строго необходимым, просто указывая, что вы можете сделать это (простой случай), действительно зная первое о regexp's.
Отредактировано с учетом комментария @Wojciech.
Ответ 4
Регулярное выражение будет искать:
\x20.*
и замените пустой строкой.
Если вы хотите узнать, быстрее ли это, просто время.