[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