逐行测试两列是否相等(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, ]
您可以为每个因素指定水平,以便它们保持一致。只需使用两列创建一个唯一的级别列表。
我试图在每行的两列中测试相等性。但是,我的数据不是数字。我正在使用的数据集是从两个数据集中合并而来的。通过数据,我注意到应该相同的列实际上是不同的。这是一个非常大的数据集(大约 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, ]
您可以为每个因素指定水平,以便它们保持一致。只需使用两列创建一个唯一的级别列表。