我试图在每行两列中测试相等性。但是,我的数据不是数字。我正在使用的数据集是从两个数据集合并而来的。通过数据我注意到应该相同的列实际上是不同的。这是一个非常大的数据集(大约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个。据我所知,我的问题没有公开的解决方案详细阐述了这个级别问题。如果有人有任何建议,将不胜感激。
答案 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, ]
您可以指定每个因素的级别,以使它们保持一致。只需使用两列创建一个唯一的级别列表。