我有两个数据框,我希望根据“物种”列合并为一个数据框
物种 |
---|
澳洲主题 |
燕麦主题 |
四肢主题 |
主题三安德拉 |
芥菜 |
长叶洛曼德拉 |
物种 | 通用名称 |
---|---|
Themeda australis (R.Br.) Stapf | 袋鼠草 |
Themeda avenacea (F.Muell.) Lugger | 原生燕麦 |
Themeda fourrivalvis (L.) Kuntze。 | 平地机草 |
Themeda triandra Forssk。 | 袋鼠草 |
Lomandra juncea (F.Muell.) Ewart | 沙漠垫子冲刺 |
Lomandra longifolia Labill。 | 刺头垫草 |
但是,因为有多个物种包含相同的字符串,所以我想仅通过物种列的前两个单词来匹配数据框(例如 Themeda triandra == Themeda triandra Forssk。)。请记住,我正在处理大数据:Dataframe 1 为 32,931 行,Dataframe 2 为 16,185 行。没有匹配项可以表示为 NA。
物种 | 通用名称 |
---|---|
澳洲主题 | 袋鼠草 |
燕麦主题 | 原生燕麦 |
四肢主题 | 平地机草 |
主题三安德拉 | 袋鼠草 |
芥菜 | 沙漠垫子冲刺 |
长叶洛曼德拉 | 刺头垫草 |
这可能吗?
我尝试过以下方法:
output <- df1 %>%
fuzzy_inner_join(df2, by = "Species", match_fun = str_detect)
你可以试试这个:
library(tidyverse)
data.frame(Species = c(
"Themeda australis (R.Br.) Stapf",
"Themeda avenacea (F.Muell.) Lugger",
"Themeda quadrivalvis (L.) Kuntze.",
"Themeda triandra Forssk. ",
"Lomandra juncea (F.Muell.) Ewart",
"Lomandra longifolia Labill."),
Common_name = c(
"Kangaroo grass",
"Native oat",
"Grader grass",
"Kangaroo grass",
"Desert Mat-rush",
"Spiny-headed Mat-rush"
)
) %>%
mutate(Species = str_extract(Species, "^([\\w\\-]+) ([\\w\\-]+)"))
结果:
Species Common_name
1 Themeda australis Kangaroo grass
2 Themeda avenacea Native oat
3 Themeda quadrivalvis Grader grass
4 Themeda triandra Kangaroo grass
5 Lomandra juncea Desert Mat-rush
6 Lomandra longifolia Spiny-headed Mat-rush
其实好像没有必要加入。我们可以从
Species
列中提取前两个单词。无论如何,您可以(简单,而不是模糊)将此结果 data.frame 与具有两个单词 Species 列的任何其他 data.frame 连接。