【问题标题】:gsub() an entire column over another columngsub() 整列覆盖另一列
【发布时间】:2015-06-26 18:48:43
【问题描述】:

我有一个 df:

df <- data.frame(
    x=c("ABC Inc", "DCV", "FGZ", "JH7 j11"),
    y=c("ABC - fasjdlkjs", "DCV . (INC) .. kdhkfhksf", "FGZ / qiuwy72gs", "JH7 j11 dhd"),
    target=c("fasjdlkjs", "inc kdhkfhksf", "qiuwy gs", "dhd")
)

其中xy 的接近子集,但不是精确子集

我想将x 中的所有内容gsub() 到y 中的""(空白),同时删除数字/标点符号。

我想要的输出存储在target

我认为这会奏效,但它没有:

df <- mutate(target = gsub(pattern=x, replacement="", y))

编辑:

分类:Y - X = Target

【问题讨论】:

    标签: regex r dplyr


    【解决方案1】:

    这(现在 - 感谢@Frank)转换大小写tolower。下面,s 通过将x 字符串用空格分隔来从x 列构建要测试的字符串

    df$res <- mapply(function(a, b) {
        s <- paste(c(unlist(strsplit(as.character(a)," ")), "[[:punct:]]"), collapse="|")
        tolower(gsub("[[:digit:]]+", " ", gsub(s, "", b)))
      }, df$x, df$y)
    
    df
    #         x                        y        target              res
    # 1 ABC Inc          ABC - fasjdlkjs     fasjdlkjs        fasjdlkjs
    # 2     DCV DCV . (INC) .. kdhkfhksf inc kdhkfhksf   inc  kdhkfhksf
    # 3     FGZ          FGZ / qiuwy72gs      qiuwy gs         qiuwy gs
    # 4 JH7 j11              JH7 j11 dhd           dhd              dhd
    

    【讨论】:

    • 甜蜜! ABC 和 INC 仍然存在。我希望那些 gsub 被淘汰。
    • 哦,我明白了,所以它应该删除x 中的所有单词,即。不匹配整个字符串,而是它的一部分?
    猜你喜欢
    • 2020-06-27
    • 1970-01-01
    • 2020-04-25
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    相关资源
    最近更新 更多