Удалить пары координат, общие для 2 отдельных фреймов данных (R)? - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь получить координаты, общие для двух разных фреймов данных (nodes и poly), из фрейма данных nodes.Код ниже работает, если координаты выстраиваются поэлементно, но не иначе.

v1 <- c(2, 2, 4)
v2 <- c(9, 2, 7)
nodes <- data.frame(v1, v2)

v3 <- c(4, 1, 2)
v4 <- c(3, 2, 2)
poly <- data.frame(v3, v4)

newnodes <- nodes[-which(nodes[,1:2] == poly[,1:2]), ]

Как мне этого добиться?Желаемый результат для nodes:

  v1 v2
   2  9
   4  7

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Вы также можете создать новый столбец ключевого слова, вставив два предыдущих столбца.Это ключевое слово помогает вам найти различия между двумя фреймами данных:

nodes_k = data.frame(nodes, key = paste(nodes$v1, nodes$v2) )
poly_k = data.frame(poly, key = paste(poly$v3, poly$v4) )

nodes_k[ !(nodes_k$key %in% poly_k$key) , ][,1:2]
#   v1 v2
# 1  2  9
# 3  4  7
0 голосов
/ 31 января 2019

Один простой способ - dplyr::setdiff.Для этого необходимо, чтобы имена столбцов совпадали, но мы можем сделать это на лету:

dplyr::setdiff(nodes, setNames(poly, names(nodes)))
#   v1 v2
# 1  2  9
# 2  4  7

Более подробно, эта операция является anti-join :

dplyr::anti_join(nodes, poly, by = c("v1" = "v3", "v2" = "v4"))
  v1 v2
1  2  9
2  4  7

Дополнительные параметры можно найти в Как запретить объединение в R , хотя в этом вопросе используется только один столбец, поэтому некоторые методы не будут работать так хорошо для вас.

...