我有一个数据框架,其中一列包含各种单词。我也有一个单独的字符串列表(与df长度不同),并且我想在数据框中创建一个新列,该列将字符串与列中的单词匹配,但只保留字符串的一部分到该单词。
例如:我有这个表:
<表类>
字
tbody><<tr>苹果 植物 香蕉ecoli 表类>
在'words'列上循环,使用grep
获得匹配的'stringlist'值,使用sub
捕获包含单词的字符并将其替换为捕获组的反向引用(\1
)
df$new_words <- sapply(df$words, function(x)
sub(sprintf("(.*%s).*", x), "\1", grep(x, stringlist,
value = TRUE)[1]))
与产出
> df
words new_words
1 apple eukaryote;plant;apple
2 plant eukaryote;plant
3 banana eukaryote;plant;banana
4 animal eukaryote;animal
5 fly eukaryote;insect;fly
6 ecoli prokaryote;bacterium;ecoli
数据df <- structure(list(words = c("apple", "plant", "banana", "animal",
"fly", "ecoli")), class = "data.frame", row.names = c(NA, -6L
))
stringlist <- c("eukaryote;plant;apple", "eukaryote;plant;banana",
"eukaryote;animal;dog",
"eukaryote;plant;orange", "eukaryote;animal;cat", "eukaryote;insect;fly",
"prokaryote;bacterium;ecoli")