2015-06-30 2 views
2

У меня есть большой набор данных. В наборе данных есть куча имен, но по причинам, по которым были введены данные, мне нужны только имена с одним словом в них. Я думал об использовании grepl, чтобы захватить любые пробелы в словах, но мне также нужно будет сделать это для «-». Мне нужны только наблюдения с одним словом в этой переменной. До сих порgrepl help in R

more_than_one_word <- mydata[grepl("\s", mydata$City) , ]

не подобрать что-нибудь вроде «Сюзи Джеймс.» Что еще я могу сделать? Благодарю.

+5

Можете ли вы предоставить некоторые данные? – hwnd

+1

«mydata [grepl («^\\ w + $ », mydata $ City),]' работает? – nicola

+0

Если вы пытались идентифицировать пробельный символ, шаблон был бы «\\ s»: 'grepl (" \\ s ", c (" test "," test with space "))' –

ответ

2

Я хотел бы сказать: «Дайте мне любую строку, это просто буквы!»

> vec = c(" ", "hi", "Chicago", "new york", "New_York") 
> vec 
[1] " "  "hi"  "Chicago" "new york" "New_York" 
> grep("^[a-zA-Z]*$", vec) 
[1] 2 3 

Это будет принимать любую строку, которая является буквами от первого символа до последнего.

+0

Спасибо, это сработает! –

2

Вы можете попробовать

only_one_word <- mydata[which(!grepl(" |-", mydata$City)), ] 

Пример:

cities <- c("Los Angeles", "New York", "Chicago", "Aix-en-Provence") 
#> cities[which(!grepl(" |-",cities))] 
#[1] "Chicago" 

Вот если вам нужно удалить любую запись с дефисом, тоже.

#> cities[which(!grepl(" ",cities))] 
#[1] "Chicago"   "Aix-en-Provence" 

Надеюсь, это поможет.

+1

Вы действительно можете опустить 'which', так как R допускает логическое индексирование (например,' города [1: 3] == города [c (TRUE, TRUE, TRUE, FALSE)] ' –

+1

Правда, но я думаю, что у каждого программиста есть определенные предпочтения. с 'which' clearer, но это только мое личное мнение. – RHertel

+1

Конечно, но я думаю, что на самом деле это не очень хорошая практика.' grepl' преобразует числа (вывод grep) в логические, когда 'which' преобразует логические обратно в числа. Это код спагетти –

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