代码之家  ›  专栏  ›  技术社区  ›  Panoid

使用R中的gsub()将y替换为x

  •  0
  • Panoid  · 技术社区  · 6 年前

    我的问题是,我想用gsub()将y替换为x,但不是对所有观测值,我只想用x中的以下观测值替换y中的观测值:关键字1和关键字2。

    我的列不包含NA或缺少的值。

    我所拥有的

    x =c('this', 'is', 'some', 'keyword1', 'or', 'terms', 'keyword2')
    y =c('SFP', 'VERB', 'ADP', 'NOUN', 'ADP', 'VERB', 'SFP')
    toString(y)
    toString(x)
    df = cbind(x,y)
    df = data.frame(df)
    df
             x    y
    1     this  SFP
    2       is VERB
    3     some  ADP
    4 keyword1 NOUN
    5       or  ADP
    6    terms VERB
    7 keyword2  SFP
    

    我需要什么:

          x    y
    1     this SFP
    2       is VERB
    3     some ADP
    4 keyword1 keyword1
    5       or ADP
    6    terms VERB
    7 keyword2 keyword2
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Jordi    6 年前

    你不需要 gsub 因为您不想替换匹配的字符本身。以下代码将替换 y 关键字为where的元素 grepl 在列中查找匹配项 x

    keywords <- c("keyword1", "keyword2")
    for (kw in keywords)
      df$y[grepl(kw, df$x)] <- kw 
    

    如果您知道匹配将是精确的,则更自然地使用:

    for (kw in keywords)
          df$y[df$x == kw] <- kw.
    

    仅供参考,您可以更轻松地创建数据帧:

    x = c('this', 'is', 'some', 'keyword1', 'or', 'terms', 'keyword2')
    y = c('SFP', 'VERB', 'ADP', 'NOUN', 'ADP', 'VERB', 'SFP')
    df = data.frame(x, y, stringsAsFactors = FALSE)
    
        2
  •  1
  •   Julius Vainora    6 年前

    正如@Rich Scriven所建议的,让我们首先创建字符列:

    df <- data.frame(x, y, stringsAsFactors = FALSE)
    

    那么有几个不错的选择

    z <- c("keyword1", "keyword2")
    df$y[df$x %in% z] <- df$x[df$x %in% z]
    # and
    df$y <- ifelse(df$x %in% z, df$x, df$y)
    

    gsub 这里没有必要,因为你的匹配似乎很精确。也就是说,您并不是在 df$y