Подмножество фрейма данных с несколькими условиями соответствия в R - PullRequest
2 голосов
/ 21 января 2012

с данными образца

> df1 <- data.frame(x=c(1,1,2,3), y=c("a","b","a","b"))
> df1
  x y
1 1 a
2 1 b
3 2 a
4 3 b
> df2 <- data.frame(x=c(1,3), y=c("a","b"))
> df2
  x y
1 1 a
2 3 b

Я хочу удалить все пары значений (x, y) из df2 из df1. Я могу сделать это, используя цикл for для каждой строки в df2, но я уверен, что есть лучший и более простой способ, о котором я просто не могу думать в данный момент. Я пытался сделать что-то, начиная со следующего:

> df1$x %in% df2$x & df1$y %in% df2$y
[1]  TRUE  TRUE FALSE  TRUE

Но это не то, что я хочу, так как df1 [2,] = (1, b) вытащен для удаления. Заранее большое спасибо за помощь.

Ответы [ 2 ]

4 голосов
/ 21 января 2012

Соберите набор пар из df2:

prs <- with(df2, paste(x,y,sep="."))

Проверьте каждую строку в df1 с помощью аналогичного процесса на членство в паре:

df1[ paste(df1$x, df1$y, sep=".") %in% prs , ]
1 голос
/ 21 января 2012

Вы можете пойти другим путем: rbind все и удалить дубликаты

out <-rbind(df1,df2)
out[!duplicated(out, fromLast=TRUE) & !duplicated(out),]

  x y
2 1 b
3 2 a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...