2015-05-20 2 views
3

мой набор данных как следующийКак удалить строку, имеющую строку, начинающуюся с пробела?

John 
Tally 
mac 
hero 

Я хочу, чтобы удалить строку, которая начала с «»

так результирующая переменная будет

John 
Tally 
hero 

Я использовал

library(stringr) 
which(startsWith(names[,1]," ")) 

, чтобы получить строки с ""

Пожалуйста, помогите мне в эффективном способе удалить это?

+1

'startsWith' приходит от' 'gdata' не stringr' – LyzandeR

ответ

8

Один из способов с regex и grepl:

vec <- c('John', 
     'Tally', 
     ' mac', 
     'hero') 

#grepl returns TRUE if there is a match. 
#'^ ' is regex for 'starting with space' 
    > vec[!grepl('^ ', vec)] 
[1] "John" "Tally" "hero" 

Или согласно @NealFultz «s комментарий:

> vec[grep('^ ', vec, invert=TRUE)] 
[1] "John" "Tally" "hero" 

> grep('^ ', vec, invert=TRUE, value=TRUE) 
[1] "John" "Tally" "hero" 

Или, если вы хотите использовать startsWith:

library(gdata) 
#notice the minus sign below just before which 
> vec[-which(startsWith(vec," "))] 
[1] "John" "Tally" "hero" 

или просто (согласно комментарию @Gregor):

> vec[!startsWith(vec, " ")] 
[1] "John" "Tally" "hero" 
+2

Смотрите также' Grep (..., инвертный = TRUE) ' –

+0

@NealFultz Прохладный! Спасибо, узнал что-то новое сегодня! – LyzandeR

+0

np. См. Также «grep (..., value = TRUE)», и вы можете получить его до одного вызова функции. –

1

Использование stringr:

> vec[!str_detect(vec, "^\\s")] 
# [1] "John" "Tally" "hero" 

Использование stringi:

> vec[!stri_detect(vec, regex = "^\\s")] 
# [1] "John" "Tally" "hero" 

 Смежные вопросы

  • Нет связанных вопросов^_^