逐行测试两列中的相等性(因子/字符数据)

时间:2017-06-13 18:39:48

标签: r duplicates dplyr levels

我试图在每行两列中测试相等性。但是,我的数据不是数字。我正在使用的数据集是从两个数据集合并而来的。通过数据我注意到应该相同的列实际上是不同的。这是一个非常大的数据集(大约300K obs)所以我正在尝试编码。

E.g。 Source.x来自合并函数中的第一个数据集,Source.y来自合并函数中的第二个数据集。

RightID   Source.x    Source.y
1000      Ground      Unnamed Stream
1001      Ground      Ground
1002      Stream      Stream
1003      Bear Creek  Ground

我想返回一个新的数据框,只包含观察1000和1003,因为这些。我试过以下代码......

lapply(rights, rights$Source.x == rights$Source.y
filter(rights, rights$Source.x == rights$Source.y
filter(rights, identical(Source.x, Source.y)

但是,由于数据是因子/字符格式,并且由于源名称的可变性而具有不同的级别,因此我的代码都没有成功。 Source.x有6743个级别,Source.y有6457个。据我所知,我的问题没有公开的解决方案详细阐述了这个级别问题。如果有人有任何建议,将不胜感激。

1 个答案:

答案 0 :(得分:0)

levels <- sort(unique(unlist(rights[, c('source.x', 'source.y')]))) rights$source.x <- factor(rights$source.x, levels = levels) rights$source.y <- factor(rights$source.y, levels = levels) result <- rights[rights$source.x == rights$source.y, ]

您可以指定每个因素的级别,以使它们保持一致。只需使用两列创建一个唯一的级别列表。