【问题标题】:Using grepl to extract a value from text across multiple columns使用 grepl 从多列文本中提取值
【发布时间】:2016-01-21 02:07:15
【问题描述】:

我有一个数据框 (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 中的“过滤器”做了类似但相反的事情。

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

【问题讨论】:

  • 你能告诉我们你的预期输出吗? Bangkok 是您将要搜索的唯一字符串吗?

标签: r if-statement plyr grepl


【解决方案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,长度为一的逻辑向量。

【讨论】:

    【解决方案2】:

    您也可以将列粘贴在一起

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

    【讨论】:

    • 也谢谢你
    猜你喜欢
    • 2012-08-10
    • 2012-06-09
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-31
    • 1970-01-01
    相关资源
    最近更新 更多