r - 将字符串提取到每行中的不同单词 - R
问题描述
我有一个包含各种单词的列的数据框。我还有一个单独的字符串列表(与 df 的长度不同),我想在数据框中创建一个新列,将字符串与列中的单词匹配,但只保留字符串的一部分直到那个词。
例如:我有这张桌子:
字 | |
---|---|
苹果 | |
植物 | |
香蕉 | |
动物 | |
飞 | |
大肠杆菌 |
和这些字符串:
stringlist <- c("eukaryote;plant;apple", "eukaryote;plant;banana","eukaryote;animal;dog", "eukaryote;plant;orange" "eukaryote;animal;cat"; "eukaryote;insect;fly", "prokaryote;bacterium;ecoli")
我想得到这个:
字 | 新词 |
---|---|
苹果 | 真核生物;植物;苹果 |
植物 | 真核生物;植物 |
香蕉 | 真核生物;植物;香蕉 |
动物 | 真核生物;动物 |
飞 | 真核生物;昆虫;苍蝇 |
大肠杆菌 | 原核生物;细菌;大肠杆菌 |
我尝试了一些类似的东西:
df$words <- c("apple", "plant", "banana", "animal", "fly", "ecoli")
df$new_words<- sub(df$words, "", stringlist)
解决方案
遍历“words”列,获取匹配的“stringlist”值grep
,用于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")
推荐阅读
- html - 使用问题
- azure - 如何在 Azure 上为 Angular 项目创建发布管道
- android - 如何在firebase实时数据库android中创建嵌套子节点
- json - 我们可以将 JSON 模式与 YAML 模式互换吗?或相反亦然?
- proxy - 如何使用 Envoy 将 /some-prefix 适当地路由到 gRPC 服务?
- r - 如何应用具有多个参数的函数并创建数据框?
- python - 如何通过与列表和字典进行比较来找到最后一个匹配的键
- flutter - 如何在单独的 Dart 文件中编写验证器?
- javascript - 数据 URL 可靠地支持哪些图像格式?
- javascript - 如何在 Alexa 技能中读取和使用来自 DynamboDB 的数据