我有两个独立的(大)数据集,我需要根据其他数据集中的存在/不存在将观察结果与一个进行隔离。具体来说,我有一个物候数据集,其中每个月都会观察树木的结果模式等。我有另一个数据集,其中包含对哺乳动物食果的观察。我想做的是在观察到喂食观察时提取(分离?指数?)物候数据的月份。每个月都会采用物候学,但喂食观察却没有。我知道在R中必须有一个简单,直接的方法来做到这一点,但我还没弄明白。我包含了一些示例数据,以及我尝试(和失败)使用的代码。此外,有人可以解释为什么当我使用" merge"函数返回的原始观察量是原来的两倍多?提前谢谢!
> p<-read.csv("PhenoSample.csv", header = TRUE, sep = ",")
>
> str(p)
'data.frame': 29 obs. of 3 variables:
$ Tree.ID: int 1 2 3 4 5 6 7 8 9 10 ...
$ yr.mo : num 2007 2007 2007 2007 2007 ...
$ Status : Factor w/ 3 levels "f","i","r": 3 3 3 3 3 3 3 3 3 2 ...
> p
Tree.ID yr.mo Status
1 1 2007.07 r
2 2 2007.07 r
3 3 2007.07 r
4 4 2007.07 r
5 5 2007.07 r
6 6 2007.07 r
7 7 2007.08 r
8 8 2007.08 r
9 9 2007.08 r
10 10 2007.08 i
11 11 2007.08 i
12 12 2007.09 i
13 13 2007.09 i
14 14 2007.09 i
15 15 2007.09 i
16 16 2007.09 i
17 17 2007.09 i
18 18 2007.09 i
19 19 2007.10 i
20 20 2007.10 f
21 21 2007.10 f
22 22 2007.10 f
23 23 2007.10 f
24 24 2007.10 f
25 25 2007.10 f
26 26 2007.10 f
27 27 2007.10 f
28 28 2007.10 f
29 29 2007.10 f
>
> f <- read.csv("FeedObsSample.csv", header = TRUE, sep = ",")
>
> str(f)
'data.frame': 17 obs. of 3 variables:
$ Tree.ID: int 3 4 5 6 7 8 9 10 11 19 ...
$ yr.mo : num 2007 2007 2007 2007 2007 ...
$ Animal : Factor w/ 3 levels "GN","KL","KL ": 2 3 1 1 1 1 2 2 2 2 ...
> f
Tree.ID yr.mo Animal
1 3 2007.07 KL
2 4 2007.07 KL
3 5 2007.07 GN
4 6 2007.07 GN
5 7 2007.08 GN
6 8 2007.08 GN
7 9 2007.08 KL
8 10 2007.08 KL
9 11 2007.08 KL
10 19 2007.10 KL
11 20 2007.10 KL
12 21 2007.10 KL
13 22 2007.10 GN
14 23 2007.10 GN
15 24 2007.10 GN
16 25 2007.10 GN
17 26 2007.10 GN
>
> newdata <- p[match(p$yr.mo== f$yr.mo)]
Error in match(p$yr.mo == f$yr.mo) :
argument "table" is missing, with no default
In addition: Warning message:
In p$yr.mo == f$yr.mo :
longer object length is not a multiple of shorter object length
>
> newdata<- merge(p, f, by = c("yr.mo"))
>
> str(newdata)
'data.frame': 137 obs. of 5 variables:
$ yr.mo : num 2007 2007 2007 2007 2007 ...
$ Tree.ID.x: int 3 3 3 3 1 1 1 1 2 2 ...
答案 0 :(得分:0)
试试这个:
subset(p, yr.mo %in% unique(f$yr.mo))