我试过"独特"和"重复"但是不能让R做我想做的事情,这基本上是比较两组数据并找出第一组数据不在第二组数据上。 data1包含客户ID,姓名和人们购买X的年份.data2包含客户ID和年份(2017年),表明他们今年购买了X.我想要做的是从今年没有购买X的data1中提取人员列表...所以我可以联系他们并告诉他们再次购买X.
> data1
ID NAME YEAR
8 Ann 2016
10 Bill 2014
11 Doug 2016
12 Emma 2015
5 Fred 2014
9 Julie 2014
13 Karl 2016
15 Matt 2014
14 Rhett 2014
7 Sara 2015
4 Tom 2014
> data2
ID YEAR
29 2017
32 2017
10 2017
21 2017
11 2017
5 2017
28 2017
33 2017
24 2017
22 2017
31 2017
15 2017
25 2017
30 2017
26 2017
7 2017
23 2017
27 2017
按ID合并data1和data2(合并(data1,dat2," ID"))给了我:
> merged_d1d2
ID NAME YEAR.x YEAR.y
1 5 Fred 2014 2017
2 7 Sara 2015 2017
3 10 Bill 2014 2017
4 11 Doug 2016 2017
5 15 Matt 2014 2017
...但我希望除了这些人之外的所有人!我还将名称添加到data2中,然后使用rbind组合data1和data2,这给了我一个带有重复项的数据集(例如2 Fred,2 Sara,2 Bill等)然后我尝试使用" unique"和"重复"但是这些总是在新数据中留下其中一个重复(1个Fred,1个Sara)。除了那些人,我希望所有人都来自data1。我觉得这是一个简单的过程,但任何帮助都会非常感激。
答案 0 :(得分:2)
简单地:
data1[!data1$ID%in%data2$ID,]
ID NAME YEAR
1 8 Ann 2016
4 12 Emma 2015
6 9 Julie 2014
7 13 Karl 2016
9 14 Rhett 2014
11 4 Tom 2014
或者您可以通过anti_join
中的ID尝试dplyr
:
data1 <- read.table(text="ID NAME YEAR
8 Ann 2016
10 Bill 2014
11 Doug 2016
12 Emma 2015
5 Fred 2014
9 Julie 2014
13 Karl 2016
15 Matt 2014
14 Rhett 2014
7 Sara 2015
4 Tom 2014",header=TRUE, stringsAsFactors=FALSE)
data2 <- read.table(text="ID YEAR
29 2017
32 2017
10 2017
21 2017
11 2017
5 2017
28 2017
33 2017
24 2017
22 2017
31 2017
15 2017
25 2017
30 2017
26 2017
7 2017
23 2017
27 2017",header=TRUE, stringsAsFactors=FALSE)
library(dplyr)
anti_join(data1,data2,by="ID")
ID NAME YEAR
1 4 Tom 2014
2 8 Ann 2016
3 9 Julie 2014
4 12 Emma 2015
5 13 Karl 2016
6 14 Rhett 2014