r - 检测 df1 中的列与 df2 中的列的部分匹配,并在 R 中输出匹配的值
问题描述
我在 R 中有两个数据框:
col1 <- c("Apple pie", "Orange soda", "Pear", "Strawberry milkshake", "Kiwi")
col2 <- c("Delicious", "Refreshing", "Crunchy", "Creamy", "Sweet")
df1 <- data.frame(col1, col2)
fruits <- c("Blueberry", "Apple", "Pear", "Orange", "Watermelon", "Honeydew", "Dragonfruit", "Strawberry")
df2 <- as.data.frame(fruits)
我想看看 df1 中是否有任何值与 df2 中的值匹配 例如,我希望“Apple pie”与“Apple”匹配,“Orange soda”与“Orange”匹配。
我想最终得到一个如下所示的 df1:
col3 <- c("Apple", "Orange", "Pear", NA, NA)
df1 <- data.frame(col1, col2, col3)
我假设代码的结构如下:
df1 <- df1 %>%
mutate(
col3 = ifelse(df2$fruits %in% str_detect(col1),
df2$fruits, NA)
)
任何帮助将不胜感激!
解决方案
我们可以使用map
函数:
library(tidyverse)
df1 %>%
mutate(col3 = map(col1, ~df2$fruits[str_detect(.x, df2$fruits)]))
这涵盖了基本元素,但您需要做一些工作来清理输出,因为它是一个列表列。
另一种选择是fuzzy_left_join
从fuzzy_join
包中使用:
library(tidyverse)
library(fuzzyjoin)
df1 %>%
fuzzy_left_join(df2, by = c("col1" = "fruits"),
match_fun = str_detect)
col1 col2 fruits
1 Apple pie Delicious Apple
2 Orange soda Refreshing Orange
3 Pear Crunchy Pear
4 Strawberry milkshake Creamy Strawberry
5 Kiwi Sweet <NA>
推荐阅读
- c# - 是否可以实例化一个对象并使用 Activator.CreateInstance 将对象初始化器变量传递给它?
- python - 如何解决 numpy.arange 无法正常工作的问题?
- mysql - MySQL - 递归列出表中所有项目的所有父母和祖先
- stata - 计算具有重复 ID 的观察值
- logging - 静态块未显示在 CMS 页面中,我正在使用 Magento2
- python - Twitter 搜索 API 多个哈希标签
- python - 组合/合并熊猫中的值
- android - Handle touch outside textview after selectable text menu appears in android
- angular - Ionic5 angular9 vendor-es2015.js ERROR [object Object]
- django - Inherit from abstract class Django