2016-01-21 8 views
2

У меня есть dataframe (df), содержащий 2 столбца данных для состояния и города. Иногда, однако, данные внутри 2 столбцов транспонируются или вводятся неправильно. Dataframe будет выглядеть примерно так:Использование grepl для извлечения значения из текста через несколько столбцов

location   state 
Bangkok 
        Bangkok Metropolitan 
Central Thai  Bangkok 

Я хочу, чтобы создать новый столбец, «Город», извлекая «Бангкок» из этих двух в отдельную колонку. Я могу сделать это для одного столбца что-то вроде:

df$city <- ifelse(grepl("Bangkok",df$location),"Bangkok","") 

Однако, я хочу, чтобы искать по крайней мере 2 или более столбцов сразу, что-то вроде:

df$city <- ifelse(grepl("Bangkok",df$location||df$state),"Bangkok","") 

, который, очевидно, не делает Работа. 'filter' in plyr Я думаю, что-то похожее, но наоборот.

Любая помощь приветствуется. Благодаря!

+1

Можете ли вы показать нам свой ожидаемый результат, а? «Бангкок» - единственная строка, которую вы когда-либо искали? –

ответ

1

Нельзя использовать grepl. Кроме того, вы должны использовать |, а не ||.

df1 <- data.frame(location=c("Bangkok", "", "Central Thai", "someth"), 
        state=c("", "Bangkok Metropolitan", "Bangkok", "youguess"), 
        stringsAsFactors = FALSE) 


df1$city <- ifelse(grepl("Bangkok", df1$location) | grepl("Bangkok", df1$state), 
        "Bangkok","") 
df1 
#  location    state city 
# 1  Bangkok      Bangkok 
# 2    Bangkok Metropolitan Bangkok 
# 3 Central Thai    Bangkok Bangkok 
# 4  someth    youguess   

См. Также? "|"

Для |, & и xor логический или необработанный вектор.

Для ||, & & и isTRUE, длина-один логический вектор.

+0

Большое спасибо – RichS

2

Вы также можете просто вставить столбцы вместе

df$city <- ifelse(grepl("Bangkok", paste(df$location,df$state)),"Bangkok","") 
+0

Спасибо за это – RichS