如何合并数据框,其中column1是column2的子字符串

时间:2017-05-07 10:04:39

标签: r dataframe merge

我有一个数据框,并希望根据列df $ name的值对每一行进行分类。对于分类,我有一个带有列tl $ name和tl $ type的两列数据帧tl。我想在类似条件下合并两个数据框,grepl(tl $ name,df $ name),而不是df $ name = tl $ name。

我已经尝试过循环遍历df中的所有行并查看与tl匹配的位置,但这似乎非常耗费时间。

E.g:

DF

  name        
# African elephant    
# Indian elephant    
# Silverback gorilla     
# Nile crocodile   
# White shark       

TL

  name        type
# elephant    mammal
# gorilla     mammal
# crocodile   reptile
# shark       fish

2 个答案:

答案 0 :(得分:1)

另一个想法:

library(tidyverse)

df %>%
  separate(name, into = c("t", "name")) %>%
  left_join(tl)

给出了:

#           t      name    type
#1    African  elephant  mammal
#2     Indian  elephant  mammal
#3 Silverback   gorilla  mammal
#4       Nile crocodile reptile
#5      White     shark    fish

答案 1 :(得分:0)

我们可以通过匹配一个或多个非空格(sub),然后从一开始就匹配一个或多个空格(\\S+)来移除\\s+的子字符串({{ 1}})字符串,用空白(^)和""替换为第二个数据集('tl')

merge

如果我们需要更新第一个数据集,

merge(transform(df, name = sub("^\\S+\\s+", "", name)), tl)
#      name    type
#1 crocodile reptile
#2  elephant  mammal
#3  elephant  mammal
#4   gorilla  mammal
#5     shark    fish