[R] Create values based on a table of conditions

Cat Cowie cat.e.cowie at gmail.com
Fri Mar 29 11:49:45 CET 2013


Hi R help forum,

I have a simple data frame of four columns - one of numbers (really a
categorical variable), one of dates and one

of data. I have over 500,000 data points to work with, spread over 40
files, each named after a different animal.

These are contact data recorded by proximity loggers over two years
between the animals of the file name and

collars being worn by other animals. The collar may have been worn by
more than one different animal in the study period.

So for example...

filename: RD2

And the data looks like:

(I'm sorry here, dput(head(RD2, 200)) was outputting all the times,
such that it was too large for the console, so I just used head() )

> head(RD2, 200)
    encounter_id       date encounter_start encounter_length
1             15 22/06/2011        22:21:45               20
2             10 04/07/2011        04:18:57                1
3             10 04/07/2011        04:23:12                1
4             15 08/07/2011        02:02:30               23
5             15 08/07/2011        02:03:26              264
6             15 08/07/2011        02:09:20               35
7             15 08/07/2011        02:10:25              173
8             15 08/07/2011        02:13:40               65
9             15 08/07/2011        02:15:12               47
10            15 08/07/2011        02:17:16               65
11            15 08/07/2011        02:39:10               54
12            15 14/07/2011        02:20:27                1
13            15 14/07/2011        02:23:35                6
14            15 14/07/2011        02:25:52                1
15            15 14/07/2011        02:26:17               39
16            15 14/07/2011        02:28:36               31
17            60 14/07/2011        02:41:56                1
18            60 14/07/2011        02:42:30                1
19            60 14/07/2011        02:43:30               36
20            60 14/07/2011        02:45:38                1
21            60 14/07/2011        02:46:07               15
22            60 14/07/2011        02:46:59               11
23            52 14/07/2011        02:57:43               97
24            12 09/08/2011        22:13:42                1
25            41 18/08/2011        02:53:18                1
26            41 19/08/2011        00:57:46                1
27            41 19/08/2011        01:59:17                1
28            41 19/08/2011        02:06:16               21
29            41 19/08/2011        02:08:50                1
30            41 19/08/2011        02:09:26               29
31            50 19/08/2011        02:19:31                1
32            50 19/08/2011        02:20:20                1
33            50 19/08/2011        02:20:54                1
34            50 19/08/2011        02:21:25               25
35            50 19/08/2011        02:22:17               20
36            50 19/08/2011        02:23:00               10
37            50 19/08/2011        02:25:10                1
38            50 19/08/2011        02:25:54                1
39            50 19/08/2011        02:26:50               75
40            50 19/08/2011        02:29:53                1
41            50 19/08/2011        02:30:41                6
42            50 28/08/2011        19:32:47                1
43            50 28/08/2011        19:36:38               10
44            39 30/08/2011        22:13:14                1
45            52 13/09/2011        20:04:57               17
46            20 18/09/2011        00:32:43                8
47            17 02/10/2011        09:10:18               52
48            17 02/10/2011        09:15:49                1
49            17 02/10/2011        09:17:19                1
50            25 03/10/2011        17:16:20                6
51            41 05/10/2011        04:04:35                1
52            52 07/10/2011        22:59:57               45
53            62 16/10/2011        18:33:03                6
54            52 28/10/2011        15:19:47                1
55            41 28/10/2011        19:00:24                8
56            17 03/12/2011        17:38:08                2
57            17 03/12/2011        17:38:49               20
58            17 20/05/2012        19:45:17               17
59            17 20/05/2012        19:45:58               47
60            17 22/05/2012        23:12:54                1
61            17 22/05/2012        23:15:15                3
62            17 22/05/2012        23:15:40                7
63            17 22/05/2012        23:16:09               40
64            17 22/05/2012        23:36:30                3
65            17 22/05/2012        23:37:29               10
66            17 22/05/2012        23:39:17                1
67            17 23/05/2012        20:44:01               15
68             6 17/07/2012        04:25:29                8
69            53 17/07/2012        23:53:01                2
70            53 24/07/2012        03:09:25                1
71            17 24/07/2012        20:58:42               16
72            17 24/07/2012        21:00:46               13
73            17 25/07/2012        04:57:54               21
74            17 25/07/2012        05:04:37                1
75            17 27/07/2012        00:53:59              125
76            17 27/07/2012        01:00:55                1
77            17 27/07/2012        01:01:57                1
78            17 27/07/2012        01:28:46                1
79            17 27/07/2012        01:41:14                5
80            17 27/07/2012        01:42:18                1
81            17 27/07/2012        01:43:46                1
82            17 27/07/2012        01:49:23                4
83            17 27/07/2012        04:26:49                1
84            17 27/07/2012        04:44:38                3
85            17 27/07/2012        04:45:27                1
86            17 27/07/2012        05:21:40                2
87            17 27/07/2012        05:22:13                2
88            17 27/07/2012        05:39:47                1
89            17 28/07/2012        00:11:46                3
90            17 30/07/2012        20:58:47                1
91            17 30/07/2012        20:59:22                1
92            17 30/07/2012        20:59:50                1
93            17 30/07/2012        21:03:15                1
94            17 30/07/2012        21:04:00               10
95            17 30/07/2012        21:05:05                1
96            17 30/07/2012        21:15:02                1
97            17 30/07/2012        22:04:55                1
98            17 30/07/2012        22:27:21                1
99            17 30/07/2012        22:33:12                5
100           17 30/07/2012        22:35:55                3
101           17 30/07/2012        22:36:32                4
102           17 30/07/2012        22:38:38               37
103           17 30/07/2012        22:40:45                6
104           17 30/07/2012        22:43:13                2
105           17 30/07/2012        22:46:56                3
106           17 30/07/2012        22:54:33               29
107           17 30/07/2012        23:12:10                1
108           17 30/07/2012        23:12:36               25
109           17 30/07/2012        23:14:42                1
110           17 30/07/2012        23:20:08                1
111           17 30/07/2012        23:29:27               11
112           17 30/07/2012        23:35:28                1
113           17 30/07/2012        23:36:44                1
114           17 30/07/2012        23:43:15                1
115           17 30/07/2012        23:43:49                1
116           17 30/07/2012        23:44:39               29
117           17 30/07/2012        23:45:31                1
118           17 30/07/2012        23:52:18               23
119           17 30/07/2012        23:53:20                2
120           17 30/07/2012        23:53:57               12
121           17 30/07/2012        23:54:37               19
122           17 30/07/2012        23:59:34               19
123           17 31/07/2012        00:13:14                5
124           17 31/07/2012        00:13:44                8
125           17 31/07/2012        00:16:08               11
126           17 31/07/2012        00:16:58               39
127           17 31/07/2012        00:18:16               13
128           17 31/07/2012        00:19:43               12
129           17 31/07/2012        00:20:26                7
130           17 31/07/2012        00:21:05                1
131           17 31/07/2012        00:27:05                4
132           17 31/07/2012        00:54:22                1
133           17 31/07/2012        00:54:48               96
134           17 31/07/2012        01:01:57                1
135           17 31/07/2012        01:47:05                1
136           17 31/07/2012        01:47:50               20
137           17 31/07/2012        01:48:32                8
138           17 31/07/2012        03:37:37                1
139           17 31/07/2012        03:38:03                5
140           17 31/07/2012        03:38:44               99
141           17 31/07/2012        03:41:34               28
142           17 31/07/2012        03:43:49               22
143           17 31/07/2012        03:45:43                1
144           17 31/07/2012        03:49:19               24
145           17 31/07/2012        04:03:03                6
146           17 31/07/2012        04:06:10               65
147           17 31/07/2012        04:11:19                1
148           17 31/07/2012        04:11:49                1
149           17 31/07/2012        04:24:48                3
150           17 31/07/2012        04:25:39               80
151           17 31/07/2012        04:27:28               17
152           17 31/07/2012        04:32:41                7
153           17 31/07/2012        04:45:24                1
154           17 31/07/2012        04:56:40                6
155           17 31/07/2012        05:05:56                2
156           17 31/07/2012        05:07:29                1
157           17 01/08/2012        00:21:25                1
158           17 01/08/2012        00:22:17               25
159           17 01/08/2012        00:23:36               12
160           17 01/08/2012        00:25:14                4
161           17 01/08/2012        00:41:13                1
162           17 01/08/2012        00:42:28               12
163           17 01/08/2012        00:43:54                2
164           17 01/08/2012        00:55:37                8
165           17 01/08/2012        01:00:38               39
166           17 01/08/2012        01:06:32                9
167           17 01/08/2012        01:11:19                1
168           17 01/08/2012        01:14:10                3
169           17 01/08/2012        01:14:48               17
170           17 01/08/2012        01:15:30               27
171           17 01/08/2012        01:16:20               71
172           17 01/08/2012        01:18:05              107
173           17 01/08/2012        01:23:54                1
174           17 01/08/2012        01:24:51               11
175           17 01/08/2012        01:32:09                1
176           17 01/08/2012        01:32:57               16
177           17 01/08/2012        01:33:35               69
178           17 01/08/2012        01:38:47                1
179           17 01/08/2012        01:39:18               75
180           17 01/08/2012        01:41:07                1
181           17 01/08/2012        01:41:48                1
182           17 01/08/2012        01:53:50                1
183           17 01/08/2012        01:55:29                1
184           17 01/08/2012        01:55:52                2
185           17 01/08/2012        01:56:17               25
186           17 01/08/2012        02:01:00                3
187           17 01/08/2012        02:03:13               32
188           17 01/08/2012        02:04:34               99
189           17 01/08/2012        02:06:43               43
190           17 01/08/2012        02:07:58                7
191           17 01/08/2012        02:08:55               22
192           17 01/08/2012        02:09:47                6
193           17 01/08/2012        02:20:21               15
194           17 01/08/2012        04:06:42                1
195           17 01/08/2012        04:15:26               46
196           17 01/08/2012        04:21:12                1
197           17 01/08/2012        04:22:12                1
198           17 01/08/2012        04:34:28               25
199           17 01/08/2012        04:35:26                1
200           17 01/08/2012        04:36:01               14

When an animal was caught and the collar battery needed to be changed,
a whole new collar had to be put on, as

these animals (cows, pigs, wild boar and red deer!) were not that easy
to catch, or hold onto for long! In order to follow the movements of
each animal rather than each collar I now need to create a new column
that assigns the data by animal rather than by collar. I have a table
of dates showing which animal was wearing which collar and when:

> head(allocate)
  animal collar start_date   end_date
1    CO1     36 16/07/2010 11/04/2011
2    CO1     64 12/04/2011 21/02/2012
3    CO1     25 21/02/2012 10/07/2012
4    CO2     28 16/07/2010 09/04/2011
5    CO2     11 12/04/2011 10/04/2012
6    CO3     46 16/07/2010 10/04/2011

> dput(allocate)
structure(list(animal = structure(c(1L, 1L, 1L, 10L, 10L, 11L,
11L, 11L, 12L, 13L, 13L, 14L, 15L, 16L, 16L, 16L, 17L, 17L, 17L,
2L, 3L, 4L, 4L, 4L, 5L, 6L, 6L, 7L, 8L, 9L, 9L, 26L, 26L, 26L,
31L, 31L, 31L, 31L, 32L, 32L, 32L, 32L, 33L, 33L, 33L, 34L, 34L,
34L, 35L, 35L, 36L, 36L, 37L, 38L, 38L, 27L, 27L, 28L, 28L, 29L,
29L, 29L, 30L, 30L, 30L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 25L,
39L, 40L, 41L), .Label = c("CO1", "CO10", "CO11", "CO12", "CO13",
"CO14", "CO15", "CO16", "CO17", "CO2", "CO3", "CO4", "CO5", "CO6",
"CO7", "CO8", "CO9", "PI1", "PI2", "PI3", "PI4", "PI5", "PI6",
"PI7", "PI8", "PO1", "PO10", "PO11", "PO12", "PO13", "PO2", "PO3",
"PO4", "PO5", "PO6", "PO7", "PO8", "PO9", "RD1", "RD2", "WB1"
), class = "factor"), collar = c(36L, 64L, 25L, 28L, 11L, 46L,
58L, 12L, 4L, 52L, 2L, 63L, 14L, 12L, 12L, 57L, 51L, 51L, 24L,
42L, 44L, 25L, 23L, 7L, 2L, 45L, 9L, 11L, 30L, 14L, 42L, 23L,
19L, 52L, 41L, 53L, 18L, 41L, 55L, 10L, 15L, 50L, 34L, 3L, 16L,
32L, 16L, 37L, 50L, 19L, 37L, 3L, 10L, 27L, 41L, 6L, 15L, 62L,
18L, 52L, 39L, 52L, 62L, 53L, 62L, 18L, 63L, 37L, 57L, 54L, 23L,
56L, 38L, 17L, 61L, 33L), start_date = structure(c(14L, 7L, 22L,
14L, 7L, 14L, 7L, 3L, 7L, 14L, 13L, 11L, 14L, 14L, 16L, 15L,
14L, 13L, 15L, 29L, 14L, 14L, 13L, 15L, 14L, 14L, 15L, 6L, 6L,
13L, 12L, 31L, 6L, 18L, 29L, 6L, 25L, 10L, 30L, 6L, 23L, 10L,
28L, 4L, 22L, 30L, 6L, 22L, 6L, 20L, 24L, 22L, 27L, 2L, 23L,
24L, 10L, 27L, 9L, 6L, 27L, 8L, 6L, 23L, 9L, 17L, 5L, 17L, 1L,
17L, 1L, 1L, 17L, 21L, 19L, 26L), .Label = c("02/06/2011", "02/11/2010",
"09/02/2012", "10/04/2011", "10/12/2010", "11/04/2011", "12/04/2011",
"13/02/2012", "14/02/2012", "15/02/2012", "15/07/2010", "16/02/2012",
"16/03/2011", "16/07/2010", "17/02/2012", "17/03/2011", "18/10/2010",
"19/07/2011", "20/06/2011", "20/07/2011", "20/08/2011", "21/02/2012",
"21/07/2011", "21/09/2011", "22/09/2011", "23/07/2011", "25/07/2011",
"25/08/2010", "26/10/2010", "28/10/2010", "29/08/2010"), class = "factor"),
    end_date = structure(c(18L, 34L, 16L, 12L, 15L, 14L, 29L,
    41L, 32L, 7L, 19L, 17L, 24L, 36L, 26L, 30L, 36L, 31L, 27L,
    11L, 36L, 36L, 26L, 28L, 9L, 20L, 41L, 15L, 25L, 24L, 10L,
    40L, 29L, 5L, 11L, 33L, 4L, 28L, 18L, 29L, 1L, 22L, 14L,
    1L, 30L, 18L, 24L, 30L, 33L, 30L, 23L, 30L, 30L, 37L, 1L,
    4L, 30L, 4L, 30L, 33L, 4L, 30L, 33L, 4L, 30L, 3L, 39L, 42L,
    6L, 38L, 2L, 21L, 8L, 35L, 35L, 13L), .Label = c("01/02/2012",
    "02/06/2011", "03/02/2011", "03/02/2012", "03/05/2012", "03/06/2011",
    "04/01/2011", "04/02/2011", "05/03/2011", "05/06/2012", "07/04/2011",
    "09/04/2011", "10/02/2012", "10/04/2011", "10/04/2012", "10/07/2012",
    "10/12/2010", "11/04/2011", "12/10/2011", "13/01/2011", "13/02/2012",
    "13/11/2012", "14/02/2012", "15/02/2012", "16/01/2012", "17/02/2012",
    "18/05/2012", "18/07/2012", "19/07/2011", "19/07/2012", "19/10/2011",
    "20/06/2011", "20/07/2011", "21/02/2012", "21/10/2012", "23/02/2011",
    "23/03/2011", "24/01/2011", "26/01/2011", "28/01/2011", "29/03/2012",
    "30/05/2011"), class = "factor")), .Names = c("animal", "collar",
"start_date", "end_date"), class = "data.frame", row.names = c(NA,
-76L))


I have so far been able to make some conditional tests, though I would
need to do this for all 76 animals in the

study...

animal1test<- (date>=01/01/13 && date<=03/01/13)
animal1test2<- (date>=04/01/13 && date<=06/01/13)
animal2test<- (date>=04/01/13 && date<=06/01/13)

to use in a giant'if else' formula:

 if(animal1test){
  collar[1]="animal1"
  } else if(animal1test2){
    collar[5]="animal1"
  }else if(animal2test)
    collar[1]="animal2"
    }else "NA"

...etc...

As I'm sure you can see, this is completely inelegant, and also not
working for me! Any ideas on how to a achieve

this?

Thanks,
Cat



More information about the R-help mailing list