基于单独的数据集在R中提取/子集化数据

时间:2015-11-07 17:26:05

标签: r merge

我有两个独立的(大)数据集,我需要根据其他数据集中的存在/不存在将观察结果与一个进行隔离。具体来说,我有一个物候数据集,其中每个月都会观察树木的结果模式等。我有另一个数据集,其中包含对哺乳动物食果的观察。我想做的是在观察到喂食观察时提取(分离?指数?)物候数据的月份。每个月都会采用物候学,但喂食观察却没有。我知道在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 ...

1 个答案:

答案 0 :(得分:0)

试试这个:

subset(p, yr.mo %in% unique(f$yr.mo))