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

时间:2018-03-09 13:57:14

标签: r gsub

我的问题是我想用gsub()替换y,但不是所有的观察,我想用x中的以下观察结果替换y中的观察:关键字1和关键字2。

我的cols不包含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 个答案:

答案 0 :(得分:1)

您不需要gsub,因为您不想替换匹配的角色本身。以下代码会将y元素替换为greplx列中找到匹配项的关键字。

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)

答案 1 :(得分:1)

正如@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的某个元素中的某处找到关键字。