我是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)
然而每个df的nrows看起来有点偏差!
> nrow(All_df)
[1] 26,032
> nrow(Bad_df)
[1] 1,452
> nrow(Good_df)
[1] 12,395
非常感谢任何帮助。
答案 0 :(得分:1)
非常直观,
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))