Я использую R для определения парных значений в двух столбцах фрейма данных, которые идентичны парным значениям в двух столбцах другого фрейма данных. Я думал, что нашел решение, но результат не совсем то, что я ожидал, и мне интересно, сможет ли кто-нибудь объяснить, почему.
df1 выглядит так:
Col1 Col2 Col3
A 1000 5
A 1500 10
A 2000 15
A 2500 20
B 900 5
B 1200 10
B 1500 15
C 1000 5
C 1200 10
C 1700 15
C 2200 20
C 2250 22
df2 содержит то же содержимое, что и df1, плюс несколько дополнительных несовпадающих строк:
Col1 Col2 Col3
A 1000 5
A 1500 10
A 2000 15
A 2500 20
A 3000 20
A 3200 22
A 3400 25
B 900 5
B 1200 10
B 1500 15
B 1700 20
B 1900 26
C 1000 5
C 1200 10
C 1700 15
C 2200 20
C 2250 22
C 2400 25
C 3000 30
C 3500 31
Я хотел бы найти парные значения в Col1 и Col2 df1, которые также можно найти в Col1 и Col2 df2. Я не могу сравнить целые строки между фреймами данных, потому что значения в Col3 могут отличаться между фреймами данных. Я использовал следующий код, чтобы найти значения в Col1 и Col2 df1, которые также находятся в Col1 и Col2 df2:
x = subset(df1, Col1 %in% df2$Col1 & Col2 %in% df2$Col2)
, который возвращает ожидаемый результат:
Col1 Col2 Col3
A 1000 5
A 1500 10
A 2000 15
A 2500 20
B 900 5
B 1200 10
B 1500 15
C 1000 5
C 1200 10
C 1700 15
C 2200 20
C 2250 22
Однако, когда я переключаю, какой фрейм данных сравнивается с другим:
y = subset(df2, Col1 %in% df1$Col1 & Col2 %in% df1$Col2)
Я получаю идентичный результат, за исключением того, что теперь есть дополнительная строка B 1700 20:
Col1 Col2 Col3
A 1000 5
A 1500 10
A 2000 15
A 2500 20
B 900 5
B 1200 10
B 1500 15
B 1700 20
C 1000 5
C 1200 10
C 1700 15
C 2200 20
C 2250 22
Обратите внимание, что B 1700 20 не найден в df1, так почему он был возвращен в этом результате? Я думаю, что мой код не делает то, что, я думаю, он делает, возможно, парная природа Col1 и Col2 фактически не сохраняется между кадрами данных? Буду признателен за любые объяснения и предложения по улучшению моего кода!