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

Using grepl to extract a value from text across multiple columns

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

location          state
Bangkok
                  Bangkok Metropolitan
Central Thai      Bangkok 

我想创建一个新列 "City",方法是将这两个列中的 'Bangkok' 提取到一个单独的列中。我可以通过类似的方式为一列执行此操作:

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

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

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

这显然行不通。 'filter' 我认为在 plyr 中做了类似但相反的事情。

感谢任何帮助。谢谢!

您可以多次使用 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,一个length-one逻辑向量。

您也可以将各列粘贴在一起

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