R 基于另一个数据集获取数据集的子集
假设我有一个数据集,即dat1R 基于另一个数据集获取数据集的子集,r,dataset,R,Dataset,假设我有一个数据集,即dat1 ID block plot SPID TotHeight 1 1 1 4 44.5 2 1 1 4 51 3 1 1 4 28.7 4 1 1 4 24.5 5 1 1 4 27.3 6 1 1 4 20 17 1 10 1 44.5 19 1 10 1 51 1 1 11 21 28.7 2 1 11 2
ID block plot SPID TotHeight
1 1 1 4 44.5
2 1 1 4 51
3 1 1 4 28.7
4 1 1 4 24.5
5 1 1 4 27.3
6 1 1 4 20
17 1 10 1 44.5
19 1 10 1 51
1 1 11 21 28.7
2 1 11 21 24.5
3 1 11 21 27.3
4 1 11 21 20
5 1 11 21 12.88666667
6 1 11 21 7.235238095
7 1 11 21 1.583809524
然后我有另一个大数据集,即dat2:
ID block plot SPID Species TotHeight
1 1 1 4 BENI 72
2 1 1 4 BENI 55
3 1 1 4 BENI 51
4 1 1 4 BENI 47
5 1 1 4 BENI 49
6 1 1 4 BENI 34
7 1 1 4 BENI .
8 1 1 4 BENI 51
9 1 1 4 BENI 66
10 1 1 4 BENI 40
11 1 1 4 BENI 24
12 1 1 4 BENI 62
13 1 1 4 BENI 34
14 1 1 4 BENI 49
15 1 1 4 BENI 57
16 1 1 4 BENI 22
17 1 1 4 BENI 76
18 1 1 4 BENI 56
19 1 1 4 BENI 55
20 1 1 4 BENI 29
21 1 1 4 BENI 24
22 1 1 4 BENI 18
23 1 1 4 BENI 65
24 1 1 4 BENI 55
25 1 1 4 BENI 63
26 1 1 4 BENI 57
27 1 1 4 BENI 57
28 1 1 4 BENI 57
29 1 1 4 BENI 45
30 1 1 4 BENI 83
31 1 1 4 BENI 37
32 1 1 4 BENI 56
33 1 1 4 BENI 65
34 1 1 4 BENI 75
35 1 1 4 BENI 51
36 1 1 4 BENI .
1 1 2 16 PRSE 141
2 1 2 16 PRSE 192
3 1 2 16 PRSE .
4 1 2 16 PRSE 197
5 1 2 16 PRSE 172
6 1 2 16 PRSE 143
7 1 2 16 PRSE 141
8 1 2 16 PRSE 155
9 1 2 16 PRSE 167
10 1 2 16 PRSE 155
11 1 2 16 PRSE 175
12 1 2 16 PRSE 190
13 1 2 16 PRSE 148
14 1 2 16 PRSE 180
15 1 2 16 PRSE .
我的问题是如何从dat2中获取ID、块和绘图与dat1中匹配的数据子集?如何从dat2中获取ID、block和plot与dat1中不匹配的数据子集?听起来您需要对ID、block和plot列进行
合并
假设您的数据是在名为dat1
和dat2
中读取的,这应该是您想要的:
> merge(dat1, dat2, by = c("ID", "block", "plot"))
ID block plot SPID.x TotHeight.x SPID.y Species TotHeight.y
1 1 1 1 4 44.5 4 BENI 72
2 2 1 1 4 51.0 4 BENI 55
3 3 1 1 4 28.7 4 BENI 51
4 4 1 1 4 24.5 4 BENI 47
5 5 1 1 4 27.3 4 BENI 49
6 6 1 1 4 20.0 4 BENI 34
这实质上是对感兴趣的三列执行SQL术语的内部联接。如果您也感兴趣,请阅读“帮助”页面,了解左侧、右侧和外部连接的可能性
完全可复制的要点
为了从dat2
中获取未合并的行,此黑客程序有效。也许有一种更有效的方法可以做到这一点,但它就在这里。首先,添加参数all.y=TRUE
。这指定了一个右连接,它将返回未合并的dat2
中的行。然后,我们可以在知道未合并的行将返回NA
:
subset(merge(dat1, dat2, by = c("ID", "block", "plot"), all.y = TRUE), is.na(SPID.x) == TRUE)
非常感谢,蔡斯。如何通过删除已合并的数据集从dat2获取新数据集?Thanks@Dan-不确定我会百分之百地跟踪你。merge
函数的结果是否符合您的要求?如果是这样,为什么不把它保存到一个新变量中,dat3
?或者覆盖dat2
,如果您知道不再需要它。Chase,Merge函数就是我想要的。我还想得到一个新的数据集,其中ID、block和plot与dat1中的不匹配。@Dan-添加到回答中以解决此问题。非常感谢。这真的帮了我大忙。