我正在尝试连接到数据集,其中连接字段是1.一个数值列,我希望允许差异阈值为0.05,以及2.其他两个字段的精确字符匹配。有关两个数据集和所需输出的简化示例,请参阅下面的内容:
# df1
site genus distance
HA Melaleuca 0.1
HA Melaleuca 0.1
HA Eucalyptus 0.3
HA Melaleuca 0.6
HA Eucalyptus 1.3
HA Eucalyptus 1.55
HA Eucalyptus 1.55
HA Melaleuca 1.75
HA Melaleuca 1.8
HA Melaleuca 1.9
#df2
site genus distance 1998 2008
HA Eucalyptus 0.1 na 4
HA Melaleuca 0.1 4 4
HA Eucalyptus 0.3 4 d
HA Melaleuca 0.65 4 3
HA Melaleuca 1.8 na 4
HA Eucalyptus 1.6 5 4
HA Eucalyptus 2.1 2 3
HA Melaleuca 2.5 4 4
HA Melaleuca 2.6 4 3
HA Eucalyptus 2.7 2 n/a
#desired join output
site genus distance 1998 2008
HA Melaleuca 0.1 na 4
HA Melaleuca 0.1 4 4
HA Eucalyptus 0.3 4 d
HA Melaleuca 0.6 4 3
HA Eucalyptus 1.3 na na
HA Eucalyptus 1.55 5 4
HA Eucalyptus 1.55 5 4
HA Melaleuca 1.75 na na
HA Melaleuca 1.8 na na
HA Melaleuca 1.9 na na
HA Eucalyptus 2.1 2 3
HA Melaleuca 2.5 4 4
HA Melaleuca 2.6 4 3
HA Eucalyptus 2.7 2 n/a函数difference_full_join() fuzzyjoin包允许指定一个距离阈值(在上面的例子中,它匹配任何" distance“值在0.05以内的值),但是我不能在其中使用精确的字符匹配来确保site和genus列是相同的。通过将==指定为要匹配的函数,在fuzzy_full_join()函数中可以很容易地完成第二部分,但是我不知道如何为match_fun =参数编写函数,以便它执行相同的操作。我可以在网上找到的这个函数的所有例子都使用了更简单的术语,比如<=。
发布于 2021-03-31 12:12:37
我想发布一个我找到的解决办法的答案。
因为字符匹配是不确定的,并且不是模糊的,所以我向两个原始数据集添加了一个数字因子列(因此在上面的示例中,Eucalyptus = 1,Melaleuca = 2,HA =1。然后,我做了一个差值为0.5的difference_full_join -因为因子是完美匹配的,这意味着difference_join只用于distance列。
https://stackoverflow.com/questions/66880663
复制相似问题