首页 > 解决方案 > 使用来自另一个数据框的引用清理重复项

问题描述

我想通过在另一个数据框中使用正确的信息来消除重复项。

问题是原始数据具有正确值和错误值的重复项。正确的值是在另一个数据框中定义的,因此我想使用该数据框作为这些行的参考。

所以我想做的工作是有条件的两行。为了说明这一点,假设原始数据是tree1

tree1 = data.frame( 
sp = c("oak","pine","apple","birch","oak","pine","apple","maple"), 
code = c(23:26,77,88,99,27))
> tree1
     sp code
1   oak   23
2  pine   24
3 apple   25
4 birch   26
5   oak   77
6  pine   88
7 apple   99
8 maple   27

参考数据是tree2

tree2 = data.frame( sp = c("oak","pine","apple"),
                    code = 23:25)
> tree2
     sp code
1   oak   23
2  pine   24
3 apple   25

我想要的输出是我摆脱了仍然有原始数据的错误值的重复项,如下所示:

> tree3
     sp code
1   oak   23
2  pine   24
3 apple   25
4 birch   26
5 maple   27

我知道这似乎是一个简单的条件操作,但我最终删除了一些原始值或最终保留了错误值的重复项(其他方式不起作用)。简单的 R-base 帮助会很棒。

标签: rdataframereferenceduplicates

解决方案


使用基础 R 的一种选择mapply。假设您有相同的列,tree1并且tree2以相同的顺序,我们可以检查tree1其中存在的值tree2并仅选择所有值匹配或没有值匹配的那些行。

vals <- rowSums(mapply(`%in%`, tree1, tree2))
tree1[vals == ncol(tree1) | vals == 0, ]

#    sp  code
#1   oak   23
#2  pine   24
#3 apple   25
#4 birch   26
#8 maple   27

推荐阅读