【问题标题】:Update a field if the value of a pattern is true如果模式的值为真,则更新字段
【发布时间】:2017-03-12 16:51:48
【问题描述】:

这是我的第一个问题,请原谅错误。 我有一个数据框,其中地址在一行中,并且有许多缺失值和几个错误。

地址

  • Braemor Drive, Clontarf, Co.Dublin
  • 邓德拉姆梅多大道
  • 马里诺菲利普斯堡大道
  • 默特尔广场,海岸

我想添加一个新字段“District”,如果地址的值包含某些值,例如如果它包含 Marino、Fairview 或 Clontarf,那么 District 应该是 Dublin 3。

Dublin3 <- c("Marino", "Fairview", "Clontarf")
matches <- unique (grep(paste(Dublin3,collapse="|"), 
DubPPReg$Address, value=TRUE))

使用 R,我如何更新匹配为真的地区的值?

【问题讨论】:

    标签: r street-address


    【解决方案1】:
    # I've created example data frame with column Adress
    df <- data.frame(Adress = c("Braemor Drive",
                                "Clontarf",
                                    "Co.Dublin",
                                    "Meadow Avenue",
                                    "Dundrum",
                                    "Philipsburgh Avenue", 
                                    "Marino",
                                    "Myrtle Square", "The Coast"))
    # And vector Dublin
    Dublin3 <- c("Marino", "Fairview", "Clontarf")
    
    # Match names in column Adress and vector Dublin 3
    df$District <- ifelse(df$Adress %in% Dublin3, "Dublin 3",FALSE)
    
        df
                   Adress District
    1       Braemor Drive    FALSE
    2            Clontarf Dublin 3
    3           Co.Dublin    FALSE
    4       Meadow Avenue    FALSE
    5             Dundrum    FALSE
    6 Philipsburgh Avenue    FALSE
    7              Marino Dublin 3
    8       Myrtle Square    FALSE
    9           The Coast    FALSE
    

    除了FALSE,您还可以选择其他内容(例如NA)。

    已编辑:如果您的数据在矢量中

    df <- c("Braemor Drive, Churchtown, Co.Dublin",
            "Meadow Avenue, Clontarf, Dublin 14",
            "Sallymount Avenue, Ranelagh", "Philipsburgh Avenue, Marino") 
    

    看起来像这样

    df
    [1] "Braemor Drive, Churchtown, Co.Dublin"
    [2] "Meadow Avenue, Clontarf, Dublin 14"  
    [3] "Sallymount Avenue, Ranelagh"         
    [4] "Philipsburgh Avenue, Marino"
    

    您可以像这样使用grepl 找到您的机器

    match <- ifelse(grepl("Marino|Fairview|Clontarf", df, ignore.case = T), "Dublin 3",FALSE)
    

    输出是

    [1] "FALSE"    "Dublin 3" "FALSE"    "Dublin 3"
    

    这意味着您要查找的一个或所有匹配名称(即 Marino、Fairview 或 Clontarf)位于 df 的第二行和第四行。

    【讨论】:

    • 非常感谢米哈。当我尝试时,您的代码示例运行良好,但我无法使其适用于我的示例。如果我有完整地址“Philipsburgh Avenue, Marino, Dublin 3”的完全匹配,它可以工作。但不是为文本中的一个词。
    • 在向量Dublin3 中定义/插入该单词,然后再次运行代码。
    • 当我尝试 Dublin3
    • 在我的数据框 (df) 中没有Avenue,但有Meadow Avenue。因此,如果您还想将Avenue 与 Dublin 3 匹配,则需要将其插入到 Adress 列中。
    • 嗨 Miha,我想我们在这里讨论的是交叉目的,我应该给出一个完整的代码示例。数据帧由这种格式的地址组成。 df
    猜你喜欢
    • 2020-04-10
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    • 2017-10-10
    相关资源
    最近更新 更多