У меня есть два отдельных (больших) набора данных, и мне нужно изолировать наблюдения от одного, исходя из наличия/отсутствия в другом наборе данных. В частности, у меня есть набор данных фенологии, где каждый месяц наблюдаются деревья для плодовых рисунков и т. Д. У меня есть другой набор данных с кормовыми наблюдениями млекопитающих 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 ...
редактировать свой вопрос с репрезентативной выборки из обоих ваших data.frames с помощью 'dput' – pcantalupo
Хотите ли вы' подмножество (р, yr.mo% в% уникальных (f $ yr.mo)) '? – jogo
Да, это было именно то, что мне нужно. Я знал, что это просто. Спасибо!! @jogo –