我有一个数据框,并希望根据列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
答案 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