2015-11-07 2 views
0

У меня есть два отдельных (больших) набора данных, и мне нужно изолировать наблюдения от одного, исходя из наличия/отсутствия в другом наборе данных. В частности, у меня есть набор данных фенологии, где каждый месяц наблюдаются деревья для плодовых рисунков и т. Д. У меня есть другой набор данных с кормовыми наблюдениями млекопитающих frugivores. Я хочу сделать, чтобы извлечь (выделить? Index?) Месяцы фенологических данных, когда наблюдались наблюдения за питанием. Фенология принималась каждый месяц, но наблюдения за питанием не проводились. Я знаю, что должен быть простой и простой способ сделать это в R, но я не понял этого. Я включил некоторые примеры данных, а также код, который я попробовал (и не смог) использовать. Кроме того, может кто-нибудь объяснить, почему, когда я использую функцию «слияния», он возвращает более чем в два раза больше первоначального количества наблюдений? Заранее спасибо!Извлечение/подмножество данных в R на основе отдельных наборов данных

> 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

редактировать свой вопрос с репрезентативной выборки из обоих ваших data.frames с помощью 'dput' – pcantalupo

+0

Хотите ли вы' подмножество (р, yr.mo% в% уникальных (f $ yr.mo)) '? – jogo

+0

Да, это было именно то, что мне нужно. Я знал, что это просто. Спасибо!! @jogo –

ответ

0

попробовать это:

subset(p, yr.mo %in% unique(f$yr.mo)) 
Смежные вопросы