R: поднабор записей столбцов в «df A» для записей столбцов в «df B» и исключение, если истинное совпадение - PullRequest
0 голосов
/ 10 марта 2012

Я начинающий R и испытываю трудности со следующей довольно простой проблемой;У меня есть два фрейма данных (All_df, Bad_df) и я хочу сгенерировать третий, чтобы All_df - Bad_df = Good_df

> All_df
Row# Originator Recipient  Date          Time
4    1          6          2000-05-16   16:15:00
7    2          7          2000-05-16   16:25:00
22   2          4          2000-07-04   18:05:00
25   2          9          2000-08-07   05:23:00
10   3          2          2000-06-17   18:07:00
13   4          8          2000-06-21   06:49:00 

> Bad_df
Row# Originator    Recipient       Date     Time
4    2             6         2000-05-16 16:15:00
7    2             7         2000-05-16 16:25:00
22   6             4         2000-07-04 18:05:00
25   12            9         2000-08-07 05:23:00
10   30            2         2000-06-17 18:07:00
13   32            8         2000-06-21 06:49:00 



I want to generate Good_df  similar to this:

> Good_df
Row#    Originator Recipient       Date     Time
4        1         6               2000-05-16   16:15:00
10       3         2               2000-06-17   18:07:00
13       4         8               2000-06-21   06:49:00 

По существу мне нужна функция, которая ищет в All_df $ Originator значения, которые отображаются в Bad_df $ Originatorустранение любых совпадений перед возвратом оставшихся значений в Good_df.

Я пытался

Good_df <-subset(All_df, Originator %in% Bad_df$Originator) 

, однако, nrows каждого df выглядят немного не так!

> nrow(All_df)
[1] 26,032
> nrow(Bad_df)
[1] 1,452
> nrow(Good_df)
[1] 12,395

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 14 марта 2012

Довольно интуитивно,

Good_df <-subset(All_df, Originator %in% Bad_df$Originator)

дает вам подмножество All_df для плохих создателей.Вам нужно отменить фильтр, чтобы получить подмножество хороших (или не плохих) отправителей, используя оператор !:

Good_df <-subset(All_df, ! Originator %in% Bad_df$Originator)

Если вас не устраивает правило приоритета, вы можете добавитьнабор скобок:

Good_df <-subset(All_df, !(Originator %in% Bad_df$Originator))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...