使用grepl从多列中的文本中提取值

时间:2016-01-21 02:07:15

标签: r if-statement plyr grepl

我有一个数据框(df),其中包含州和城市的2列数据。但是,有时2列内的数据会被转置或输入错误。数据框看起来像这样:

location          state
Bangkok
                  Bangkok Metropolitan
Central Thai      Bangkok 

我想创建一个新专栏," City"通过提取曼谷'从这两个进入一个单独的列。我可以通过以下方式为一列做到这一点:

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

但是,我想一次搜索至少2个或更多列,例如:

df$city <- ifelse(grepl("Bangkok",df$location||df$state),"Bangkok","")
显然,这不起作用。 &#39;过滤器&#39;在普利尔,我认为做了类似但相反的事情。

任何帮助表示赞赏。谢谢!

2 个答案:

答案 0 :(得分:2)

您也可以将列粘贴在一起

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

答案 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        

另见?&#34; |&#34;

For |,&amp;和xor逻辑或原始向量。

对于||,&amp;&amp;和isTRUE,长度为一的逻辑向量。