逐行测试两列是否相等(factor/character 数据)

Testing row by row for equality in two columns (factor/character data)

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

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

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

我想 return 一个只包含观察值 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)

但是,由于数据采用 factor/character 格式,并且由于源名称的可变性而具有不同的级别,因此我的代码 none 已经成功运行。 Source.x 有 6743 个级别,Source.y 有 6457 个级别。据我所知,没有针对我的问题的已发布解决方案详细说明此级别问题。如果有人有任何建议,将不胜感激。

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, ]

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