我的问题是我想用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
答案 0 :(得分:1)
您不需要gsub
,因为您不想替换匹配的角色本身。以下代码会将y
元素替换为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)
答案 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
的某个元素中的某处找到关键字。