Звучит так, как будто вы хотите merge
для идентификатора столбца, блока и графика.
Предполагая, что ваши данные читаются с именами dat1
и dat2
, это должно быть то, что вы хотите:
> merge(dat1, dat2, by = c("ID", "block", "plot"))
ID block plot SPID.x TotHeight.x SPID.y Species TotHeight.y
1 1 1 1 4 44.5 4 BENI 72
2 2 1 1 4 51.0 4 BENI 55
3 3 1 1 4 28.7 4 BENI 51
4 4 1 1 4 24.5 4 BENI 47
5 5 1 1 4 27.3 4 BENI 49
6 6 1 1 4 20.0 4 BENI 34
По сути, это выполняет внутреннее объединение в терминах SQL для трех интересующих столбцов.Прочитайте страницу справки для слияния для левого, правого и внешнего соединения, если это также представляет интерес.
Полностью воспроизводимый гист здесь
Чтобы получить строки, которые не былине сливаются с dat2
, этот хак работает.Вероятно, есть более эффективный способ сделать это, но здесь это так.Сначала добавьте параметр all.y = TRUE
.Это определяет правое соединение, которое будет возвращать строки из dat2
, которые не слились.Тогда мы можем установить это, зная, что строки, которые не слились, вернут NA
s:
subset(merge(dat1, dat2, by = c("ID", "block", "plot"), all.y = TRUE), is.na(SPID.x) == TRUE)