3

我有一个数据框(df),其中包含州和城市的 2 列数据。但是,有时 2 列中的数据被转置或输入错误。数据框将如下所示:

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","")

显然,这是行不通的。我认为 plyr 中的“过滤器”做了类似但相反的事情。

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

4

2 回答 2

2

您也可以将列粘贴在一起

df$city <- ifelse(grepl("Bangkok", paste(df$location,df$state)),"Bangkok","")
于 2016-01-21T02:33:09.400 回答
2

您可以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,长度为一的逻辑向量。

于 2016-01-21T02:25:08.277 回答