Module 9 Loops and conditionals
This module considers programming with loops and conditional statements in R.
A template project for this module is given on Posit Cloud (open it and use it while reading the notes).
Learning path diagram
9.1 Learning outcomes
By the end of this module, you are expected to be able to:
- Formulate conditional statements.
- Use functions
any
andall
. - Formulate loops in R using for and while statements.
- Use function
if_else
.
The learning outcomes relate to the overall learning goals number 2, 4 and 10 of the course.
9.2 Conditionals and control flow
An excellent introduction to conditionals and if statements is given in Chapter 1 of the interactive DataCamp course Intermediate R. Please complete the chapter before continuing.
Some functions are also useful for comparing logical data types. Consider this example:
x <- c(1, 3, 5, 10, 2, 17, 11, NA, 4)
x > 10 # are the elements greater that 10
#> [1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE NA FALSE
any(x > 10) # are any of the elements greater that 10
#> [1] TRUE
all(x > 10) # are all of the elements greater that 10
#> [1] FALSE
all(x < 20) # are all of the elements greater that 20
#> [1] NA
all(x < 20, na.rm = TRUE) # are all of the elements greater that 20
#> [1] TRUE
That is, functions any
and all
can be used to join logical values in vectors.
Some if statements can be written alternatively using function if_else
:
For example:
x <- c(-5:5, NA)
x
#> [1] -5 -4 -3 -2 -1 0 1 2 3 4 5 NA
## using if and for
res <- rep("", length(x))
for (i in seq_along(x)) {
if (is.na(x[i])) res[i] <- "missing"
else if (x[i] < 0) res[i] <- "negative"
else res[i] <- "positive"
}
res
#> [1] "negative" "negative" "negative" "negative" "negative" "positive" "positive" "positive"
#> [9] "positive" "positive" "positive" "missing"
## implicit if statement
res <- rep("", length(x))
res
#> [1] "" "" "" "" "" "" "" "" "" "" "" ""
res[x < 0] <- "negative"
res[x >= 0] <- "positive"
res[is.na(x)] <- "missing"
res
#> [1] "negative" "negative" "negative" "negative" "negative" "positive" "positive" "positive"
#> [9] "positive" "positive" "positive" "missing"
## using if_else
res <- if_else(x < 0, "negative", "positive", "missing")
res
#> [1] "negative" "negative" "negative" "negative" "negative" "positive" "positive" "positive"
#> [9] "positive" "positive" "positive" "missing"
9.3 Loops
An excellent introduction to conditionals and if statements is given in Chapter 2 of the interactive DataCamp course Intermediate R. Please complete the chapter before continuing (stop when Chapter 2 finishes).
Loops in R may be slow. However, not if you follow some golden rules:
- Do not use a loop when a vectorized alternative exists.
- Do not grow objects (via
c
,cbind
, etc) during the loop - R has to create a new object and copy across the information just to add a new element or row/column. Instead, allocate an object to hold the results and fill it in during the loop.
As an example, consider the for loop with 4 iterations:
i_val <- c(1,2,6,9)
res <- rep(NA,4)
res
#> [1] NA NA NA NA
for (idx in 1:length(i_val)) {
res[idx] <- 6 * i_val[idx] + 9
}
res
#> [1] 15 21 45 63
Note we allocate memory for the result vector before the loop so we do not have to grow the result object. Next, we calculate results \(6i+9\) using a loop. Be careful here! This is not the same:
In this example, however, we can use a vectorized alternative:
where the operation is applied to each element in the vector.
Nested for loops is also possible. A simple example of a nested loop:
for (i in 1:3) {
for (j in 1:2) {
cat(str_c("i =", i, " j = ",j, "\n"))
}
}
#> i =1 j = 1
#> i =1 j = 2
#> i =2 j = 1
#> i =2 j = 2
#> i =3 j = 1
#> i =3 j = 2
We here use the function cat
to print out a string (\n
indicates new line). Note how the nested loops are executed:
- Set
i = 1
(outer loop)- Set
j = 1
(inner loop),i
stays 1 - Set
j = 2
(inner loop),i
stays 1 - Inner loop finishes, proceed with outer loop.
- Set
- Increase
i = 2
(outer loop)- Set
j = 1
(inner loop),i
stays 2 - Set
j = 2
(inner loop),i
stays 2 - Inner loop finishes, proceed with outer loop.
- Set
- Increase
i = 3
(outer loop)- Set
j = 1
(inner loop),i
stays 3 - Set
j = 2
(inner loop),i
stays 3 - Inner loop finishes, proceed with outer loop.
- Set
- Outer loop finishes as well (we looped over
i in 1:3
). Job done.
Nested loops can be used to iterate over matrices or data frames:
mat <- matrix(NA, nrow = 2, ncol = 3)
mat
#> [,1] [,2] [,3]
#> [1,] NA NA NA
#> [2,] NA NA NA
for (i in 1:nrow(mat)) {
for (j in 1:ncol(mat)) {
mat[i,j] <- (i-1)*ncol(mat) + j
cat(str_c("Entry (", i, ", ", j, ") = ", mat[i,j], "\n"))
}
}
#> Entry (1, 1) = 1
#> Entry (1, 2) = 2
#> Entry (1, 3) = 3
#> Entry (2, 1) = 4
#> Entry (2, 2) = 5
#> Entry (2, 3) = 6
mat
#> [,1] [,2] [,3]
#> [1,] 1 2 3
#> [2,] 4 5 6
Often you can replace nested loops with a single loop by using expand_grid
:
library(tidyverse) # load function expand_grid
mat <- matrix(NA, nrow = 2, ncol = 3)
ite <- expand_grid(i = 1:2, j=1:3)
ite
#> # A tibble: 6 × 2
#> i j
#> <int> <int>
#> 1 1 1
#> 2 1 2
#> 3 1 3
#> 4 2 1
#> 5 2 2
#> 6 2 3
for (r in 1:nrow(ite)) { # iterate over rows
i <- ite$i[r]
j <- ite$j[r]
mat[i,j] <- (i-1)*ncol(mat) + j
cat(str_c("Entry (", i, ", ", j, ") = ", mat[i,j], "\n"))
}
#> Entry (1, 1) = 1
#> Entry (1, 2) = 2
#> Entry (1, 3) = 3
#> Entry (2, 1) = 4
#> Entry (2, 2) = 5
#> Entry (2, 3) = 6
mat
#> [,1] [,2] [,3]
#> [1,] 1 2 3
#> [2,] 4 5 6
Note expand_grid
creates a data frame with all combinations. This way of looping is a more flexible approach since you can
- nest more loops by adding more columns to
ite
, - add different values in each column.
For instance, if you only want to calculate values for row 2 and columns 1 and 3 the code becomes:
mat <- matrix(NA, nrow = 2, ncol = 3)
ite <- expand_grid(i = 2, j = c(1,3))
ite
#> # A tibble: 2 × 2
#> i j
#> <dbl> <dbl>
#> 1 2 1
#> 2 2 3
for (r in 1:nrow(ite)) { # iterate over rows
i <- ite$i[r]
j <- ite$j[r]
mat[i,j] <- (i-1)*ncol(mat) + j
cat(str_c("Entry (", i, ", ", j, ") = ", mat[i,j], "\n"))
}
#> Entry (2, 1) = 4
#> Entry (2, 3) = 6
mat
#> [,1] [,2] [,3]
#> [1,] NA NA NA
#> [2,] 4 NA 6
9.4 Recap
Comparison/relational operators known to R are:
<
for less than,>
for greater than,<=
for less than or equal to,>=
for greater than or equal to,==
for equal to each other (and not=
which is typically used for assignment!),!=
not equal to each other.
Logical operators known to R are:
&
and,|
or,!
not.
If you use &&
and ||
only the first element in vectors are compared. In general this is used rarely.
Useful functions that return a logical are any
and all
which can be used to join logical values in vectors.
Conditional Statements can be constructed using for instance if
and while
statements. Moreover, function if_else
is a vectorized alternative.
Loops can be created using for
and while
statements.
You can break out of a loop using break
and jump to the next iteration (skipping the remainder of the code in the loop) using next
.
Do not use a loop when a vectorized alternative exists.
Do not grow objects during the loop. Instead, allocate an object to hold the results and fill it in during the loop.
Nested loops are possible in R. However, often they can be converted into a single loop by defining a data frame having the values of the nested loops in each row. Here function expand_grid
may be useful to create the data frame.
9.5 Exercises
Below you will find a set of exercises. Always have a look at the exercises before you meet in your study group and try to solve them yourself. Are you stuck, see the help page. Some of the solutions to each exercise can be seen by pressing the button at each question. Beware, you will not learn by giving up too early. Put some effort into finding a solution! Always practice using shortcuts in RStudio (see Tools > Keyboard Shortcuts Help).
Go to the Tools for Analytics workspace and download/export the TM9 project. Open it on your laptop and have a look at the files in the exercises
folder which can be used as a starting point.
9.5.1 Exercise (conditional expressions)
Solve this exercise using a script file
Consider object
x
:What will this conditional expression return?
What will the following expressions return?
Which of the expressions above is always
FALSE
when at least one entry of a logical vectorx
is TRUE?
Consider vector:
- Use the
if_else
function to set elements with value below 7 to 0.
- Use the
if_else
function to set elements with value below 7 or above 10 toNA_integer_
(which is the NA/missing value of an integer).
Consider code
which generates a number from the vector
c(1:10,NA,5.5)
.Write code which set object
y
equal to “even” ifx
is even, “odd” ifx
is odd, “decimal” ifx
has a decimal not zero and “missing” ifx
isNA
. Hint: have a look at?'%%'
(the modulo operator).
9.5.2 Exercise (loops)
- Using a
for
loop, create a vector having values \(2i + 4\) given \(i=1\ldots 4\).
- Using a
for
loop, create a vector having values \(2i + 4\) given \(i=2,5,6,12\).
- Solve Question 2 using a
while
loop.
- Solve Questions 1 and 2 using a vectorized alternative.
9.5.3 Exercise (search vector)
This exercise is a slightly modified version an exam assignment (reexam 2021-A1).
Consider the vector:
- Is any of the entries in
v
below or equal to 2?
- Is all of the entries in
v
above or equal to 2?
- Does
v
have missing values?
- Which entries in
v
are above 10? You must return the indices, e.g. the index ofv[3]
is 3.
- Create a vector
res
whereres[i]
is equal tov[i]
ifv[i]
is less than 10 and otherwise zero (also ifv[i]
isNA
).
9.5.4 Exercise (calculating distances)
Consider zip codes in Jutland:
# remotes::install_github("bss-osca/tfa-package", upgrade = FALSE) # run to upgrade
library(tidyverse)
data(zips, package = "tfa") # load the zips data from the tfa package
zips
#> postal_code place_name latitude longitude
#> 1 1050 København K 55.7 12.59
#> 2 1051 København K 55.7 12.59
#> 3 1052 København K 55.7 12.59
#> 4 1053 København K 55.7 12.59
#> 5 1054 København K 55.7 12.59
#> 6 1055 København K 55.7 12.59
#> 7 1056 København K 55.7 12.59
#> 8 1057 København K 55.7 12.59
#> 9 1058 København K 55.7 12.59
#> 10 1059 København K 55.7 12.59
#> 11 1060 København K 55.7 12.59
#> 12 1061 København K 55.7 12.58
#> 13 1062 København K 55.7 12.58
#> 14 1063 København K 55.7 12.58
#> 15 1064 København K 55.7 12.58
#> 16 1065 København K 55.7 12.58
#> 17 1066 København K 55.7 12.58
#> 18 1067 København K 55.7 12.58
#> 19 1068 København K 55.7 12.58
#> 20 1069 København K 55.7 12.58
#> 21 1070 København K 55.7 12.58
#> 22 1071 København K 55.7 12.58
#> 23 1072 København K 55.7 12.58
#> 24 1073 København K 55.7 12.58
#> 25 1074 København K 55.7 12.58
#> 26 1100 København K 55.7 12.58
#> 27 1101 København K 55.7 12.58
#> 28 1102 København K 55.7 12.58
#> 29 1103 København K 55.7 12.58
#> 30 1104 København K 55.7 12.58
#> 31 1105 København K 55.7 12.58
#> 32 1106 København K 55.7 12.58
#> 33 1107 København K 55.7 12.58
#> 34 1110 København K 55.7 12.58
#> 35 1111 København K 55.7 12.58
#> 36 1112 København K 55.7 12.58
#> 37 1113 København K 55.7 12.58
#> 38 1114 København K 55.7 12.58
#> 39 1115 København K 55.7 12.58
#> 40 1116 København K 55.7 12.58
#> 41 1117 København K 55.7 12.58
#> 42 1118 København K 55.7 12.58
#> 43 1119 København K 55.7 12.58
#> 44 1120 København K 55.7 12.58
#> 45 1121 København K 55.7 12.58
#> 46 1122 København K 55.7 12.58
#> 47 1123 København K 55.7 12.58
#> 48 1124 København K 55.7 12.58
#> 49 1125 København K 55.7 12.58
#> 50 1126 København K 55.7 12.58
#> 51 1127 København K 55.7 12.58
#> 52 1128 København K 55.7 12.57
#> 53 1129 København K 55.7 12.57
#> 54 1130 København K 55.7 12.57
#> 55 1131 København K 55.7 12.57
#> 56 1150 København K 55.7 12.58
#> 57 1151 København K 55.7 12.58
#> 58 1152 København K 55.7 12.58
#> 59 1153 København K 55.7 12.58
#> 60 1154 København K 55.7 12.58
#> 61 1155 København K 55.7 12.58
#> 62 1156 København K 55.7 12.58
#> 63 1157 København K 55.7 12.58
#> 64 1158 København K 55.7 12.57
#> 65 1159 København K 55.7 12.57
#> 66 1160 København K 55.7 12.58
#> 67 1161 København K 55.7 12.57
#> 68 1162 København K 55.7 12.57
#> 69 1164 København K 55.7 12.57
#> 70 1165 København K 55.7 12.57
#> 71 1166 København K 55.7 12.57
#> 72 1167 København K 55.7 12.57
#> 73 1168 København K 55.7 12.57
#> 74 1169 København K 55.7 12.57
#> 75 1170 København K 55.7 12.57
#> 76 1171 København K 55.7 12.57
#> 77 1172 København K 55.7 12.57
#> 78 1173 København K 55.7 12.57
#> 79 1174 København K 55.7 12.57
#> 80 1175 København K 55.7 12.57
#> 81 1200 København K 55.7 12.58
#> 82 1201 København K 55.7 12.58
#> 83 1202 København K 55.7 12.58
#> 84 1203 København K 55.7 12.58
#> 85 1204 København K 55.7 12.58
#> 86 1205 København K 55.7 12.58
#> 87 1206 København K 55.7 12.58
#> 88 1207 København K 55.7 12.58
#> 89 1208 København K 55.7 12.58
#> 90 1209 København K 55.7 12.58
#> 91 1210 København K 55.7 12.57
#> 92 1211 København K 55.7 12.57
#> 93 1212 København K 55.7 12.58
#> 94 1213 København K 55.7 12.58
#> 95 1214 København K 55.7 12.58
#> 96 1215 København K 55.7 12.58
#> 97 1216 København K 55.7 12.58
#> 98 1218 København K 55.7 12.58
#> 99 1219 København K 55.7 12.58
#> 100 1220 København K 55.7 12.58
#> 101 1221 København K 55.7 12.58
#> 102 1250 København K 55.7 12.59
#> 103 1251 København K 55.7 12.59
#> 104 1252 København K 55.7 12.60
#> 105 1253 København K 55.7 12.59
#> 106 1254 København K 55.7 12.59
#> 107 1255 København K 55.7 12.59
#> 108 1256 København K 55.7 12.59
#> 109 1257 København K 55.7 12.59
#> 110 1259 København K 55.7 12.60
#> 111 1260 København K 55.7 12.59
#> 112 1261 København K 55.7 12.59
#> 113 1263 København K 55.7 12.59
#> 114 1264 København K 55.7 12.59
#> 115 1265 København K 55.7 12.59
#> 116 1266 København K 55.7 12.59
#> 117 1267 København K 55.7 12.59
#> 118 1268 København K 55.7 12.59
#> 119 1270 København K 55.7 12.59
#> 120 1271 København K 55.7 12.59
#> 121 1300 København K 55.7 12.59
#> 122 1301 København K 55.7 12.59
#> 123 1302 København K 55.7 12.59
#> 124 1303 København K 55.7 12.59
#> 125 1304 København K 55.7 12.58
#> 126 1306 København K 55.7 12.58
#> 127 1307 København K 55.7 12.58
#> 128 1308 København K 55.7 12.58
#> 129 1309 København K 55.7 12.58
#> 130 1310 København K 55.7 12.59
#> 131 1311 København K 55.7 12.59
#> 132 1312 København K 55.7 12.59
#> 133 1313 København K 55.7 12.59
#> 134 1314 København K 55.7 12.59
#> 135 1315 København K 55.7 12.59
#> 136 1316 København K 55.7 12.58
#> 137 1317 København K 55.7 12.58
#> 138 1318 København K 55.7 12.58
#> 139 1319 København K 55.7 12.59
#> 140 1320 København K 55.7 12.59
#> 141 1321 København K 55.7 12.59
#> 142 1322 København K 55.7 12.59
#> 143 1323 København K 55.7 12.59
#> 144 1324 København K 55.7 12.59
#> 145 1325 København K 55.7 12.59
#> 146 1326 København K 55.7 12.59
#> 147 1327 København K 55.7 12.59
#> 148 1328 København K 55.7 12.59
#> 149 1329 København K 55.7 12.59
#> 150 1350 København K 55.7 12.58
#> 151 1352 København K 55.7 12.57
#> 152 1353 København K 55.7 12.57
#> 153 1354 København K 55.7 12.57
#> 154 1355 København K 55.7 12.57
#> 155 1356 København K 55.7 12.57
#> 156 1357 København K 55.7 12.57
#> 157 1358 København K 55.7 12.57
#> 158 1359 København K 55.7 12.57
#> 159 1360 København K 55.7 12.57
#> 160 1361 København K 55.7 12.57
#> 161 1362 København K 55.7 12.57
#> 162 1363 København K 55.7 12.57
#> 163 1364 København K 55.7 12.57
#> 164 1365 København K 55.7 12.56
#> 165 1366 København K 55.7 12.56
#> 166 1367 København K 55.7 12.56
#> 167 1368 København K 55.7 12.56
#> 168 1369 København K 55.7 12.56
#> 169 1370 København K 55.7 12.56
#> 170 1371 København K 55.7 12.57
#> 171 1400 København K 55.7 12.59
#> 172 1401 København K 55.7 12.59
#> 173 1402 København K 55.7 12.59
#> 174 1403 København K 55.7 12.59
#> 175 1406 København K 55.7 12.59
#> 176 1407 København K 55.7 12.59
#> 177 1408 København K 55.7 12.59
#> 178 1409 København K 55.7 12.59
#> 179 1410 København K 55.7 12.59
#> 180 1411 København K 55.7 12.58
#> 181 1412 København K 55.7 12.59
#> 182 1413 København K 55.7 12.59
#> 183 1414 København K 55.7 12.59
#> 184 1415 København K 55.7 12.59
#> 185 1416 København K 55.7 12.59
#> 186 1417 København K 55.7 12.59
#> 187 1418 København K 55.7 12.59
#> 188 1419 København K 55.7 12.59
#> 189 1420 København K 55.7 12.59
#> 190 1421 København K 55.7 12.59
#> 191 1422 København K 55.7 12.60
#> 192 1423 København K 55.7 12.59
#> 193 1424 København K 55.7 12.59
#> 194 1425 København K 55.7 12.59
#> 195 1426 København K 55.7 12.60
#> 196 1427 København K 55.7 12.60
#> 197 1428 København K 55.7 12.60
#> 198 1429 København K 55.7 12.60
#> 199 1430 København K 55.7 12.60
#> 200 1432 København K 55.7 12.61
#> 201 1433 København K 55.7 12.70
#> 202 1434 København K 55.7 12.60
#> 203 1435 København K 55.7 12.61
#> 204 1436 København K 55.7 12.60
#> 205 1437 København K 55.7 12.60
#> 206 1438 København K 55.7 12.60
#> 207 1439 København K 55.7 12.61
#> 208 1440 København K 55.7 12.60
#> 209 1441 København K 55.7 12.61
#> 210 1450 København K 55.7 12.57
#> 211 1451 København K 55.7 12.57
#> 212 1452 København K 55.7 12.57
#> 213 1453 København K 55.7 12.57
#> 214 1454 København K 55.7 12.57
#> 215 1455 København K 55.7 12.57
#> 216 1456 København K 55.7 12.57
#> 217 1457 København K 55.7 12.57
#> 218 1458 København K 55.7 12.57
#> 219 1459 København K 55.7 12.57
#> 220 1460 København K 55.7 12.57
#> 221 1461 København K 55.7 12.57
#> 222 1462 København K 55.7 12.57
#> 223 1463 København K 55.7 12.57
#> 224 1464 København K 55.7 12.57
#> 225 1465 København K 55.7 12.57
#> 226 1466 København K 55.7 12.57
#> 227 1467 København K 55.7 12.57
#> 228 1468 København K 55.7 12.57
#> 229 1470 København K 55.7 12.57
#> 230 1471 København K 55.7 12.58
#> 231 1472 København K 55.7 12.58
#> 232 1473 København K 55.7 12.58
#> 233 1550 København V 55.7 12.57
#> 234 1551 København V 55.7 12.57
#> 235 1552 København V 55.7 12.57
#> 236 1553 København V 55.7 12.57
#> 237 1554 København V 55.7 12.57
#> 238 1555 København V 55.7 12.57
#> 239 1556 København V 55.7 12.57
#> 240 1557 København V 55.7 12.57
#> 241 1558 København V 55.7 12.58
#> 242 1559 København V 55.7 12.58
#> 243 1560 København V 55.7 12.57
#> 244 1561 København V 55.7 12.56
#> 245 1562 København V 55.7 12.57
#> 246 1563 København V 55.7 12.57
#> 247 1564 København V 55.7 12.58
#> 248 1567 København V 55.7 12.57
#> 249 1568 København V 55.7 12.57
#> 250 1569 København V 55.7 12.57
#> 251 1570 København V 55.7 12.56
#> 252 1571 København V 55.7 12.57
#> 253 1572 København V 55.7 12.57
#> 254 1573 København V 55.7 12.57
#> 255 1574 København V 55.7 12.57
#> 256 1575 København V 55.7 12.57
#> 257 1576 København V 55.7 12.57
#> 258 1577 København V 55.7 12.57
#> 259 1600 København V 55.7 12.56
#> 260 1601 København V 55.7 12.56
#> 261 1602 København V 55.7 12.56
#> 262 1603 København V 55.7 12.56
#> 263 1604 København V 55.7 12.56
#> 264 1605 København V 55.7 12.56
#> 265 1606 København V 55.7 12.56
#> 266 1607 København V 55.7 12.56
#> 267 1608 København V 55.7 12.57
#> 268 1609 København V 55.7 12.56
#> 269 1610 København V 55.7 12.55
#> 270 1611 København V 55.7 12.56
#> 271 1612 København V 55.7 12.56
#> 272 1613 København V 55.7 12.56
#> 273 1614 København V 55.7 12.56
#> 274 1615 København V 55.7 12.56
#> 275 1616 København V 55.7 12.56
#> 276 1617 København V 55.7 12.55
#> 277 1618 København V 55.7 12.55
#> 278 1619 København V 55.7 12.55
#> 279 1620 København V 55.7 12.55
#> 280 1621 København V 55.7 12.55
#> 281 1622 København V 55.7 12.55
#> 282 1623 København V 55.7 12.55
#> 283 1624 København V 55.7 12.55
#> 284 1631 København V 55.7 12.56
#> 285 1632 København V 55.7 12.55
#> 286 1633 København V 55.7 12.56
#> 287 1634 København V 55.7 12.56
#> 288 1635 København V 55.7 12.56
#> 289 1650 København V 55.7 12.55
#> 290 1651 København V 55.7 12.56
#> 291 1652 København V 55.7 12.56
#> 292 1653 København V 55.7 12.56
#> 293 1654 København V 55.7 12.56
#> 294 1655 København V 55.7 12.56
#> 295 1656 København V 55.7 12.56
#> 296 1657 København V 55.7 12.56
#> 297 1658 København V 55.7 12.55
#> 298 1659 København V 55.7 12.55
#> 299 1660 København V 55.7 12.55
#> 300 1661 København V 55.7 12.55
#> 301 1662 København V 55.7 12.55
#> 302 1663 København V 55.7 12.55
#> 303 1664 København V 55.7 12.55
#> 304 1665 København V 55.7 12.55
#> 305 1666 København V 55.7 12.55
#> 306 1667 København V 55.7 12.55
#> 307 1668 København V 55.7 12.55
#> 308 1669 København V 55.7 12.55
#> 309 1670 København V 55.7 12.55
#> 310 1671 København V 55.7 12.55
#> 311 1672 København V 55.7 12.55
#> 312 1673 København V 55.7 12.55
#> 313 1674 København V 55.7 12.54
#> 314 1675 København V 55.7 12.55
#> 315 1676 København V 55.7 12.55
#> 316 1677 København V 55.7 12.55
#> 317 1699 København V 55.7 12.56
#> 318 1700 København V 55.7 12.56
#> 319 1701 København V 55.7 12.56
#> 320 1702 København V 55.7 12.56
#> 321 1703 København V 55.7 12.56
#> 322 1704 København V 55.7 12.57
#> 323 1705 København V 55.7 12.55
#> 324 1706 København V 55.7 12.56
#> 325 1707 København V 55.7 12.56
#> 326 1708 København V 55.7 12.56
#> 327 1709 København V 55.7 12.55
#> 328 1710 København V 55.7 12.56
#> 329 1711 København V 55.7 12.56
#> 330 1712 København V 55.7 12.56
#> 331 1714 København V 55.7 12.56
#> 332 1715 København V 55.7 12.56
#> 333 1716 København V 55.7 12.56
#> 334 1717 København V 55.7 12.56
#> 335 1718 København V 55.7 12.56
#> 336 1719 København V 55.7 12.56
#> 337 1720 København V 55.7 12.55
#> 338 1721 København V 55.7 12.55
#> 339 1722 København V 55.7 12.55
#> 340 1723 København V 55.7 12.55
#> 341 1724 København V 55.7 12.55
#> 342 1725 København V 55.7 12.55
#> 343 1726 København V 55.7 12.55
#> 344 1727 København V 55.7 12.55
#> 345 1728 København V 55.7 12.55
#> 346 1729 København V 55.7 12.55
#> 347 1730 København V 55.7 12.55
#> 348 1731 København V 55.7 12.55
#> 349 1732 København V 55.7 12.55
#> 350 1733 København V 55.7 12.54
#> 351 1734 København V 55.7 12.55
#> 352 1735 København V 55.7 12.55
#> 353 1736 København V 55.7 12.54
#> 354 1737 København V 55.7 12.54
#> 355 1738 København V 55.7 12.54
#> 356 1739 København V 55.7 12.54
#> 357 1749 København V 55.7 12.54
#> 358 1750 København V 55.7 12.54
#> 359 1751 København V 55.7 12.54
#> 360 1752 København V 55.7 12.54
#> 361 1753 København V 55.7 12.54
#> 362 1754 København V 55.7 12.54
#> 363 1755 København V 55.7 12.54
#> 364 1756 København V 55.7 12.54
#> 365 1757 København V 55.7 12.54
#> 366 1758 København V 55.7 12.54
#> 367 1759 København V 55.7 12.54
#> 368 1760 København V 55.7 12.54
#> 369 1761 København V 55.7 12.54
#> 370 1762 København V 55.7 12.54
#> 371 1763 København V 55.7 12.54
#> 372 1764 København V 55.7 12.54
#> 373 1765 København V 55.7 12.54
#> 374 1766 København V 55.7 12.54
#> 375 1770 København V 55.7 12.54
#> 376 1771 København V 55.7 12.54
#> 377 1772 København V 55.7 12.54
#> 378 1773 København V 55.7 12.54
#> 379 1774 København V 55.7 12.54
#> 380 1775 København V 55.7 12.54
#> 381 1777 København V 55.7 12.54
#> 382 1799 København V 55.7 12.53
#> 383 2100 København Ø 55.7 12.57
#> 384 2150 Nordhavn 55.7 12.60
#> 385 2200 København N 55.7 12.55
#> 386 2300 København S 55.7 12.60
#> 387 2400 København NV 55.7 12.53
#> 388 2450 København SV 55.6 12.54
#> 389 2500 Valby 55.7 12.50
#> 390 2700 Brønshøj 55.7 12.48
#> 391 2720 Vanløse 55.7 12.49
#> 392 1800 Frederiksberg C 55.7 12.53
#> 393 1801 Frederiksberg C 55.7 12.53
#> 394 1802 Frederiksberg C 55.7 12.53
#> 395 1803 Frederiksberg C 55.7 12.53
#> 396 1804 Frederiksberg C 55.7 12.53
#> 397 1805 Frederiksberg C 55.7 12.53
#> 398 1806 Frederiksberg C 55.7 12.53
#> 399 1807 Frederiksberg C 55.7 12.53
#> 400 1808 Frederiksberg C 55.7 12.53
#> 401 1809 Frederiksberg C 55.7 12.54
#> 402 1810 Frederiksberg C 55.7 12.54
#> 403 1811 Frederiksberg C 55.7 12.54
#> 404 1812 Frederiksberg C 55.7 12.54
#> 405 1813 Frederiksberg C 55.7 12.54
#> 406 1814 Frederiksberg C 55.7 12.54
#> 407 1815 Frederiksberg C 55.7 12.54
#> 408 1816 Frederiksberg C 55.7 12.54
#> 409 1817 Frederiksberg C 55.7 12.54
#> 410 1818 Frederiksberg C 55.7 12.54
#> 411 1819 Frederiksberg C 55.7 12.55
#> 412 1820 Frederiksberg C 55.7 12.54
#> 413 1822 Frederiksberg C 55.7 12.55
#> 414 1823 Frederiksberg C 55.7 12.55
#> 415 1824 Frederiksberg C 55.7 12.55
#> 416 1825 Frederiksberg C 55.7 12.55
#> 417 1826 Frederiksberg C 55.7 12.54
#> 418 1827 Frederiksberg C 55.7 12.54
#> 419 1828 Frederiksberg C 55.7 12.54
#> 420 1829 Frederiksberg C 55.7 12.54
#> 421 1850 Frederiksberg C 55.7 12.54
#> 422 1851 Frederiksberg C 55.7 12.54
#> 423 1852 Frederiksberg C 55.7 12.54
#> 424 1853 Frederiksberg C 55.7 12.54
#> 425 1854 Frederiksberg C 55.7 12.53
#> 426 1855 Frederiksberg C 55.7 12.54
#> 427 1856 Frederiksberg C 55.7 12.54
#> 428 1857 Frederiksberg C 55.7 12.54
#> 429 1860 Frederiksberg C 55.7 12.54
#> 430 1861 Frederiksberg C 55.7 12.54
#> 431 1862 Frederiksberg C 55.7 12.54
#> 432 1863 Frederiksberg C 55.7 12.54
#> 433 1864 Frederiksberg C 55.7 12.54
#> 434 1865 Frederiksberg C 55.7 12.54
#> 435 1866 Frederiksberg C 55.7 12.54
#> 436 1867 Frederiksberg C 55.7 12.54
#> 437 1868 Frederiksberg C 55.7 12.54
#> 438 1870 Frederiksberg C 55.7 12.54
#> 439 1871 Frederiksberg C 55.7 12.54
#> 440 1872 Frederiksberg C 55.7 12.55
#> 441 1873 Frederiksberg C 55.7 12.54
#> 442 1874 Frederiksberg C 55.7 12.55
#> 443 1875 Frederiksberg C 55.7 12.55
#> 444 1876 Frederiksberg C 55.7 12.54
#> 445 1877 Frederiksberg C 55.7 12.54
#> 446 1878 Frederiksberg C 55.7 12.54
#> 447 1879 Frederiksberg C 55.7 12.55
#> 448 1900 Frederiksberg C 55.7 12.55
#> 449 1901 Frederiksberg C 55.7 12.55
#> 450 1902 Frederiksberg C 55.7 12.55
#> 451 1903 Frederiksberg C 55.7 12.55
#> 452 1904 Frederiksberg C 55.7 12.55
#> 453 1905 Frederiksberg C 55.7 12.55
#> 454 1906 Frederiksberg C 55.7 12.55
#> 455 1908 Frederiksberg C 55.7 12.55
#> 456 1909 Frederiksberg C 55.7 12.55
#> 457 1910 Frederiksberg C 55.7 12.55
#> 458 1911 Frederiksberg C 55.7 12.55
#> 459 1912 Frederiksberg C 55.7 12.55
#> 460 1913 Frederiksberg C 55.7 12.55
#> 461 1914 Frederiksberg C 55.7 12.55
#> 462 1915 Frederiksberg C 55.7 12.55
#> 463 1916 Frederiksberg C 55.7 12.56
#> 464 1917 Frederiksberg C 55.7 12.56
#> 465 1920 Frederiksberg C 55.7 12.55
#> 466 1921 Frederiksberg C 55.7 12.55
#> 467 1922 Frederiksberg C 55.7 12.55
#> 468 1923 Frederiksberg C 55.7 12.55
#> 469 1924 Frederiksberg C 55.7 12.55
#> 470 1925 Frederiksberg C 55.7 12.55
#> 471 1926 Frederiksberg C 55.7 12.56
#> 472 1927 Frederiksberg C 55.7 12.56
#> 473 1928 Frederiksberg C 55.7 12.56
#> 474 1950 Frederiksberg C 55.7 12.54
#> 475 1951 Frederiksberg C 55.7 12.54
#> 476 1952 Frederiksberg C 55.7 12.54
#> 477 1953 Frederiksberg C 55.7 12.54
#> 478 1954 Frederiksberg C 55.7 12.54
#> 479 1955 Frederiksberg C 55.7 12.54
#> 480 1956 Frederiksberg C 55.7 12.54
#> 481 1957 Frederiksberg C 55.7 12.54
#> 482 1958 Frederiksberg C 55.7 12.54
#> 483 1959 Frederiksberg C 55.7 12.54
#> 484 1960 Frederiksberg C 55.7 12.55
#> 485 1961 Frederiksberg C 55.7 12.55
#> 486 1962 Frederiksberg C 55.7 12.55
#> 487 1963 Frederiksberg C 55.7 12.55
#> 488 1964 Frederiksberg C 55.7 12.55
#> 489 1965 Frederiksberg C 55.7 12.55
#> 490 1966 Frederiksberg C 55.7 12.55
#> 491 1967 Frederiksberg C 55.7 12.55
#> 492 1970 Frederiksberg C 55.7 12.55
#> 493 1971 Frederiksberg C 55.7 12.55
#> 494 1972 Frederiksberg C 55.7 12.55
#> 495 1973 Frederiksberg C 55.7 12.55
#> 496 1974 Frederiksberg C 55.7 12.55
#> 497 2000 Frederiksberg 55.7 12.52
#> 498 2740 Skovlunde 55.7 12.40
#> 499 2750 Ballerup 55.7 12.36
#> 500 2760 Måløv 55.8 12.32
#> 501 2605 Brøndby 55.7 12.41
#> 502 2660 Brøndby Strand 55.6 12.42
#> 503 2791 Dragør 55.6 12.65
#> 504 2820 Gentofte 55.8 12.53
#> 505 2870 Dyssegård 55.7 12.53
#> 506 2900 Hellerup 55.7 12.56
#> 507 2920 Charlottenlund 55.8 12.57
#> 508 2930 Klampenborg 55.8 12.59
#> 509 2860 Søborg 55.7 12.48
#> 510 2880 Bagsværd 55.8 12.46
#> 511 2600 Glostrup 55.7 12.40
#> 512 2730 Herlev 55.7 12.43
#> 513 2620 Albertslund 55.7 12.35
#> 514 2650 Hvidovre 55.6 12.47
#> 515 2630 Taastrup 55.6 12.29
#> 516 2640 Hedehusene 55.7 12.20
#> 517 2800 Kongens Lyngby 55.8 12.51
#> 518 2830 Virum 55.8 12.47
#> 519 2610 Rødovre 55.7 12.45
#> 520 2635 Ishøj 55.6 12.34
#> 521 2770 Kastrup 55.6 12.61
#> 522 2625 Vallensbæk 55.6 12.36
#> 523 2665 Vallensbæk Strand 55.6 12.39
#> 524 3500 Værløse 55.8 12.36
#> 525 3520 Farum 55.8 12.37
#> 526 3450 Allerød 55.9 12.35
#> 527 3540 Lynge 55.8 12.28
#> 528 2980 Kokkedal 55.9 12.49
#> 529 2990 Nivå 55.9 12.50
#> 530 3050 Humlebæk 56.0 12.52
#> 531 3480 Fredensborg 56.0 12.41
#> 532 3000 Helsingør 56.0 12.59
#> 533 3060 Espergærde 56.0 12.54
#> 534 3070 Snekkersten 56.0 12.58
#> 535 3080 Tikøb 56.0 12.45
#> 536 3100 Hornbæk 56.1 12.45
#> 537 3140 Ålsgårde 56.1 12.53
#> 538 3150 Hellebæk 56.1 12.56
#> 539 3490 Kvistgård 56.0 12.50
#> 540 3320 Skævinge 55.9 12.15
#> 541 3330 Gørløse 55.9 12.20
#> 542 3400 Hillerød 55.9 12.29
#> 543 2960 Rungsted Kyst 55.9 12.53
#> 544 2970 Hørsholm 55.9 12.50
#> 545 2840 Holte 55.8 12.49
#> 546 2850 Nærum 55.8 12.53
#> 547 2942 Skodsborg 55.8 12.57
#> 548 2950 Vedbæk 55.8 12.55
#> 549 3460 Birkerød 55.8 12.43
#> 550 2765 Smørum 55.7 12.30
#> 551 3650 Ølstykke 55.8 12.16
#> 552 3660 Stenløse 55.8 12.22
#> 553 3670 Veksø Sjælland 55.8 12.24
#> 554 3550 Slangerup 55.8 12.17
#> 555 3600 Frederikssund 55.8 12.07
#> 556 3630 Jægerspris 55.9 11.96
#> 557 4050 Skibby 55.8 11.96
#> 558 3300 Frederiksværk 56.0 12.02
#> 559 3310 Ølsted 55.9 12.06
#> 560 3360 Liseleje 56.0 11.97
#> 561 3370 Melby 56.0 11.97
#> 562 3390 Hundested 56.0 11.88
#> 563 3120 Dronningmølle 56.1 12.38
#> 564 3200 Helsinge 56.0 12.18
#> 565 3210 Vejby 56.1 12.14
#> 566 3220 Tisvildeleje 56.1 12.09
#> 567 3230 Græsted 56.1 12.26
#> 568 3250 Gilleleje 56.1 12.29
#> 569 3700 Rønne 55.1 14.72
#> 570 3720 Aakirkeby 55.1 14.93
#> 571 3730 Nexø 55.0 15.11
#> 572 3740 Svaneke 55.1 15.13
#> 573 3751 Østermarie 55.1 15.02
#> 574 3760 Gudhjem 55.2 14.95
#> 575 3770 Allinge 55.3 14.80
#> 576 3782 Klemensker 55.2 14.81
#> 577 3790 Hasle 55.2 14.72
#> 578 8700 Horsens 55.9 9.85
#> 579 8732 Hovedgård 55.9 9.96
#> 580 8740 Brædstrup 56.0 9.62
#> 581 8751 Gedved 55.9 9.85
#> 582 8752 Østbirk 56.0 9.75
#> 583 8789 Endelave 55.8 10.28
#> 584 6933 Kibæk 56.0 8.87
#> 585 6973 Ørnhøj 56.2 8.57
#> 586 7270 Stakroge 55.9 8.85
#> 587 7280 Sønder Felding 55.9 8.78
#> 588 7400 Herning 56.1 8.97
#> 589 7451 Sunds 56.2 9.02
#> 590 7480 Vildbjerg 56.2 8.77
#> 591 7490 Aulum 56.3 8.80
#> 592 7540 Haderup 56.4 8.97
#> 593 7550 Sørvad 56.3 8.66
#> 594 6990 Ulfborg 56.3 8.22
#> 595 7500 Holstebro 56.4 8.63
#> 596 7570 Vemb 56.3 8.36
#> 597 7830 Vinderup 56.5 8.80
#> 598 7620 Lemvig 56.5 8.29
#> 599 7650 Bøvlingbjerg 56.4 8.21
#> 600 7660 Bækmarksbro 56.4 8.32
#> 601 7673 Harboøre 56.6 8.16
#> 602 7680 Thyborøn 56.7 8.21
#> 603 7560 Hjerm 56.4 8.65
#> 604 7600 Struer 56.5 8.57
#> 605 7790 Thyholm 56.6 8.55
#> 606 8400 Ebeltoft 56.2 10.67
#> 607 8410 Rønde 56.3 10.47
#> 608 8420 Knebel 56.2 10.47
#> 609 8444 Balle 56.3 10.79
#> 610 8543 Hornslet 56.3 10.31
#> 611 8544 Mørke 56.4 10.34
#> 612 8550 Ryomgård 56.4 10.48
#> 613 8560 Kolind 56.4 10.59
#> 614 8581 Nimtofte 56.4 10.58
#> 615 8500 Grenaa 56.4 10.87
#> 616 8570 Trustrup 56.4 10.76
#> 617 8585 Glesborg 56.5 10.67
#> 618 8586 Ørum Djurs 56.4 10.66
#> 619 8592 Anholt 56.7 11.54
#> 620 8950 Ørsted 56.5 10.33
#> 621 8961 Allingåbro 56.5 10.42
#> 622 8963 Auning 56.4 10.38
#> 623 8370 Hadsten 56.3 10.07
#> 624 8382 Hinnerup 56.3 10.07
#> 625 8450 Hammel 56.3 9.87
#> 626 8472 Sporup 56.2 9.83
#> 627 8860 Ulstrup 56.4 9.79
#> 628 8881 Thorsø 56.3 9.79
#> 629 8300 Odder 56.0 10.18
#> 630 8350 Hundslund 55.9 10.06
#> 631 8799 Tunø 56.0 10.44
#> 632 8870 Langå 56.4 9.92
#> 633 8900 Randers C 56.5 10.03
#> 634 8920 Randers NV 56.5 9.98
#> 635 8930 Randers NØ 56.5 10.08
#> 636 8940 Randers SV 56.4 10.03
#> 637 8960 Randers SØ 56.4 10.11
#> 638 8970 Havndal 56.6 10.23
#> 639 8981 Spentrup 56.5 10.04
#> 640 8983 Gjerlev J 56.6 10.14
#> 641 8990 Fårup 56.5 9.88
#> 642 8600 Silkeborg 56.2 9.56
#> 643 8620 Kjellerup 56.3 9.41
#> 644 8632 Lemming 56.2 9.54
#> 645 8641 Sorring 56.2 9.78
#> 646 8643 Ans By 56.3 9.60
#> 647 8653 Them 56.1 9.55
#> 648 8654 Bryrup 56.0 9.52
#> 649 8882 Fårvang 56.3 9.71
#> 650 8883 Gjern 56.2 9.74
#> 651 8305 Samsø 55.9 10.59
#> 652 8362 Hørning 56.1 10.03
#> 653 8464 Galten 56.2 9.93
#> 654 8660 Skanderborg 56.0 9.93
#> 655 8670 Låsby 56.2 9.81
#> 656 8680 Ry 56.1 9.76
#> 657 8000 Aarhus C 56.2 10.20
#> 658 8200 Aarhus N 56.2 10.19
#> 659 8210 Aarhus V 56.2 10.16
#> 660 8220 Brabrand 56.2 10.11
#> 661 8230 Åbyhøj 56.2 10.16
#> 662 8240 Risskov 56.2 10.23
#> 663 8250 Egå 56.2 10.29
#> 664 8260 Viby J 56.1 10.14
#> 665 8270 Højbjerg 56.1 10.19
#> 666 8310 Tranbjerg J 56.1 10.13
#> 667 8320 Mårslet 56.1 10.16
#> 668 8330 Beder 56.1 10.22
#> 669 8340 Malling 56.0 10.21
#> 670 8355 Solbjerg 56.0 10.09
#> 671 8361 Hasselager 56.1 10.09
#> 672 8380 Trige 56.3 10.15
#> 673 8381 Tilst 56.2 10.11
#> 674 8462 Harlev J 56.1 10.00
#> 675 8471 Sabro 56.2 10.04
#> 676 8520 Lystrup 56.2 10.23
#> 677 8530 Hjortshøj 56.3 10.25
#> 678 8541 Skødstrup 56.3 10.31
#> 679 7330 Brande 55.9 9.11
#> 680 7361 Ejstrupholm 56.0 9.29
#> 681 7362 Hampen 56.0 9.36
#> 682 7430 Ikast 56.1 9.16
#> 683 7441 Bording 56.2 9.27
#> 684 7442 Engesvang 56.2 9.34
#> 685 8765 Klovborg 55.9 9.49
#> 686 8766 Nørre Snede 56.0 9.40
#> 687 6880 Tarm 55.9 8.51
#> 688 6893 Hemmet 55.8 8.31
#> 689 6900 Skjern 56.0 8.50
#> 690 6920 Videbæk 56.1 8.66
#> 691 6940 Lem St 56.0 8.39
#> 692 6950 Ringkøbing 56.1 8.21
#> 693 6960 Hvide Sande 56.0 8.14
#> 694 6971 Spjald 56.1 8.50
#> 695 6980 Tim 56.2 8.29
#> 696 7130 Juelsminde 55.8 10.00
#> 697 7140 Stouby 55.7 9.80
#> 698 7150 Barrit 55.7 9.89
#> 699 7160 Tørring 55.9 9.50
#> 700 7171 Uldum 55.8 9.59
#> 701 8721 Daugård 55.7 9.71
#> 702 8722 Hedensted 55.8 9.70
#> 703 8723 Løsning 55.8 9.70
#> 704 8762 Flemming 55.9 9.66
#> 705 8763 Rask Mølle 55.9 9.61
#> 706 8781 Stenderup 55.8 9.81
#> 707 8783 Hornsyld 55.8 9.85
#> 708 7800 Skive 56.6 9.02
#> 709 7840 Højslev 56.6 9.17
#> 710 7860 Spøttrup 56.6 8.82
#> 711 7870 Roslev 56.7 8.99
#> 712 7884 Fur 56.8 9.02
#> 713 7470 Karup J 56.3 9.20
#> 714 7850 Stoholm Jyll 56.5 9.14
#> 715 8800 Viborg 56.4 9.39
#> 716 8830 Tjele 56.5 9.61
#> 717 8831 Løgstrup 56.5 9.32
#> 718 8832 Skals 56.6 9.37
#> 719 8840 Rødkærsbro 56.4 9.51
#> 720 8850 Bjerringbro 56.4 9.65
#> 721 9632 Møldrup 56.6 9.50
#> 722 7900 Nykøbing M 56.8 8.83
#> 723 7950 Erslev 56.8 8.71
#> 724 7960 Karby 56.8 8.58
#> 725 7970 Redsted M 56.7 8.65
#> 726 7980 Vils 56.8 8.73
#> 727 7990 Øster Assels 56.7 8.72
#> 728 7700 Thisted 57.0 8.63
#> 729 7730 Hanstholm 57.1 8.64
#> 730 7741 Frøstrup 57.1 8.98
#> 731 7742 Vesløs 57.0 8.97
#> 732 7752 Snedsted 56.9 8.50
#> 733 7755 Bedsted Thy 56.8 8.40
#> 734 7760 Hurup Thy 56.7 8.41
#> 735 7770 Vestervig 56.8 8.28
#> 736 9320 Hjallerup 57.2 10.15
#> 737 9330 Dronninglund 57.2 10.30
#> 738 9340 Asaa 57.1 10.39
#> 739 9700 Brønderslev 57.3 9.95
#> 740 9740 Jerslev J 57.3 10.11
#> 741 9300 Sæby 57.3 10.50
#> 742 9352 Dybvad 57.3 10.33
#> 743 9750 Østervrå 57.3 10.26
#> 744 9900 Frederikshavn 57.4 10.50
#> 745 9970 Strandby 57.5 10.49
#> 746 9981 Jerup 57.5 10.44
#> 747 9982 Ålbæk 57.6 10.40
#> 748 9990 Skagen 57.7 10.56
#> 749 9600 Aars 56.8 9.50
#> 750 9620 Aalestrup 56.7 9.49
#> 751 9631 Gedsted 56.7 9.34
#> 752 9640 Farsø 56.8 9.29
#> 753 9670 Løgstør 56.9 9.27
#> 754 9681 Ranum 56.9 9.20
#> 755 9940 Læsø 57.3 11.01
#> 756 9520 Skørping 56.8 9.91
#> 757 9530 Støvring 56.9 9.82
#> 758 9541 Suldrup 56.8 9.69
#> 759 9574 Bælum 56.8 10.12
#> 760 9575 Terndrup 56.8 10.06
#> 761 9610 Nørager 56.7 9.67
#> 762 9500 Hobro 56.6 9.80
#> 763 9510 Arden 56.8 9.89
#> 764 9550 Mariager 56.7 10.01
#> 765 9560 Hadsund 56.8 10.21
#> 766 9440 Aabybro 57.1 9.74
#> 767 9460 Brovst 57.1 9.52
#> 768 9490 Pandrup 57.2 9.64
#> 769 9492 Blokhus 57.3 9.60
#> 770 9493 Saltum 57.3 9.66
#> 771 9690 Fjerritslev 57.1 9.26
#> 772 9000 Aalborg 57.0 9.91
#> 773 9200 Aalborg SV 57.0 9.87
#> 774 9210 Aalborg SØ 57.0 9.94
#> 775 9220 Aalborg Øst 57.0 9.99
#> 776 9230 Svenstrup J 57.0 9.85
#> 777 9240 Nibe 57.0 9.62
#> 778 9260 Gistrup 57.0 9.99
#> 779 9270 Klarup 57.0 10.05
#> 780 9280 Storvorde 57.0 10.17
#> 781 9293 Kongerslev 56.9 10.12
#> 782 9310 Vodskov 57.1 10.07
#> 783 9362 Gandrup 57.1 10.19
#> 784 9370 Hals 57.0 10.33
#> 785 9380 Vestbjerg 57.1 9.96
#> 786 9381 Sulsted 57.2 9.96
#> 787 9382 Tylstrup 57.2 9.94
#> 788 9400 Nørresundby 57.1 9.92
#> 789 9430 Vadum 57.1 9.86
#> 790 9480 Løkken 57.4 9.74
#> 791 9760 Vrå 57.4 9.95
#> 792 9800 Hjørring 57.5 9.97
#> 793 9830 Tårs 57.4 10.13
#> 794 9850 Hirtshals 57.6 9.97
#> 795 9870 Sindal 57.5 10.24
#> 796 9881 Bindslev 57.6 10.20
#> 797 2670 Greve 55.6 12.30
#> 798 2690 Karlslunde 55.6 12.25
#> 799 4030 Tune 55.6 12.19
#> 800 4140 Borup 55.5 11.98
#> 801 4600 Køge 55.5 12.17
#> 802 4623 Lille Skensved 55.5 12.10
#> 803 4632 Bjæverskov 55.5 12.04
#> 804 4681 Herfølge 55.4 12.14
#> 805 4682 Tureby 55.4 12.08
#> 806 4000 Roskilde 55.7 12.10
#> 807 4040 Jyllinge 55.8 12.11
#> 808 4130 Viby Sjælland 55.5 12.02
#> 809 4621 Gadstrup 55.6 12.10
#> 810 2680 Solrød Strand 55.5 12.21
#> 811 4622 Havdrup 55.5 12.12
#> 812 4500 Nykøbing Sj 55.9 11.64
#> 813 4534 Hørve 55.8 11.43
#> 814 4540 Fårevejle 55.8 11.43
#> 815 4550 Asnæs 55.8 11.50
#> 816 4560 Vig 55.9 11.56
#> 817 4571 Grevinge 55.8 11.59
#> 818 4572 Nørre Asmindrup 55.9 11.62
#> 819 4573 Højby 55.9 11.55
#> 820 4581 Rørvig 55.9 11.75
#> 821 4583 Sjællands Odde 56.0 11.36
#> 822 4300 Holbæk 55.7 11.71
#> 823 4305 Orø 55.8 11.81
#> 824 4340 Tølløse 55.6 11.73
#> 825 4350 Ugerløse 55.6 11.65
#> 826 4360 Kirke Eskilstrup 55.6 11.77
#> 827 4370 Store Merløse 55.5 11.72
#> 828 4390 Vipperød 55.7 11.74
#> 829 4420 Regstrup 55.7 11.62
#> 830 4440 Mørkøv 55.7 11.51
#> 831 4450 Jyderup 55.7 11.41
#> 832 4520 Svinninge 55.7 11.48
#> 833 4532 Gislinge 55.7 11.55
#> 834 4640 Faxe 55.2 12.12
#> 835 4653 Karise 55.3 12.20
#> 836 4654 Faxe Ladeplads 55.2 12.16
#> 837 4683 Rønnede 55.3 12.03
#> 838 4690 Haslev 55.3 11.97
#> 839 4270 Høng 55.5 11.30
#> 840 4281 Gørlev 55.5 11.18
#> 841 4400 Kalundborg 55.7 11.08
#> 842 4460 Snertinge 55.7 11.38
#> 843 4470 Svebølle 55.7 11.29
#> 844 4480 Store Fuglede 55.6 11.17
#> 845 4490 Jerslev Sjælland 55.6 11.23
#> 846 4591 Føllenslev 55.7 11.33
#> 847 4592 Sejerø 55.9 11.13
#> 848 4593 Eskebjerg 55.7 11.27
#> 849 4100 Ringsted 55.4 11.81
#> 850 4174 Jystrup Midtsj 55.5 11.86
#> 851 4200 Slagelse 55.4 11.34
#> 852 4220 Korsør 55.3 11.15
#> 853 4230 Skælskør 55.3 11.30
#> 854 4241 Vemmelev 55.4 11.26
#> 855 4242 Boeslunde 55.3 11.27
#> 856 4243 Rude 55.2 11.49
#> 857 4244 Agersø 55.2 11.19
#> 858 4245 Omø 55.2 11.15
#> 859 4261 Dalmose 55.3 11.42
#> 860 4652 Hårlev 55.4 12.23
#> 861 4660 Store Heddinge 55.3 12.38
#> 862 4671 Strøby 55.4 12.30
#> 863 4672 Klippinge 55.4 12.33
#> 864 4673 Rødvig Stevns 55.3 12.37
#> 865 4173 Fjenneslev 55.4 11.66
#> 866 4180 Sorø 55.4 11.56
#> 867 4190 Munke Bjergby 55.5 11.53
#> 868 4291 Ruds Vedby 55.5 11.38
#> 869 4293 Dianalund 55.5 11.49
#> 870 4295 Stenlille 55.5 11.58
#> 871 4296 Nyrup 55.5 11.65
#> 872 4060 Kirke Såby 55.6 11.86
#> 873 4070 Kirke Hyllinge 55.7 11.89
#> 874 4320 Lejre 55.6 11.97
#> 875 4330 Hvalsø 55.6 11.86
#> 876 4895 Errindlev 54.7 11.50
#> 877 4900 Nakskov 54.8 11.13
#> 878 4912 Harpelunde 54.9 11.07
#> 879 4913 Horslunde 54.9 11.21
#> 880 4920 Søllested 54.8 11.28
#> 881 4930 Maribo 54.8 11.50
#> 882 4941 Bandholm 54.8 11.47
#> 883 4942 Askø 54.9 11.50
#> 884 4943 Torrig L 54.9 11.32
#> 885 4944 Fejø 54.9 11.41
#> 886 4945 Femø 55.0 11.54
#> 887 4951 Nørreballe 54.8 11.43
#> 888 4952 Stokkemarke 54.8 11.37
#> 889 4953 Vesterborg 54.9 11.30
#> 890 4960 Holeby 54.7 11.48
#> 891 4970 Rødby 54.7 11.36
#> 892 4983 Dannemare 54.7 11.19
#> 893 4160 Herlufmagle 55.3 11.75
#> 894 4171 Glumsø 55.4 11.69
#> 895 4250 Fuglebjerg 55.3 11.55
#> 896 4262 Sandved 55.3 11.52
#> 897 4684 Holmegaard 55.3 11.83
#> 898 4700 Næstved 55.2 11.76
#> 899 4733 Tappernøje 55.2 11.97
#> 900 4736 Karrebæksminde 55.2 11.65
#> 901 4800 Nykøbing F 54.8 11.88
#> 902 4840 Nørre Alslev 54.9 11.85
#> 903 4850 Stubbekøbing 54.9 12.04
#> 904 4862 Guldborg 54.9 11.73
#> 905 4863 Eskilstrup 54.9 11.88
#> 906 4871 Horbelev 54.8 12.06
#> 907 4872 Idestrup 54.7 11.98
#> 908 4873 Væggerløse 54.7 11.95
#> 909 4874 Gedser 54.6 11.94
#> 910 4880 Nysted 54.7 11.73
#> 911 4891 Toreby L 54.8 11.78
#> 912 4892 Kettinge 54.7 11.75
#> 913 4894 Øster Ulslev 54.7 11.61
#> 914 4990 Sakskøbing 54.8 11.65
#> 915 4720 Præstø 55.1 12.06
#> 916 4735 Mern 55.0 12.07
#> 917 4750 Lundby 55.1 11.84
#> 918 4760 Vordingborg 55.0 11.92
#> 919 4771 Kalvehave 55.0 12.15
#> 920 4772 Langebæk 55.0 12.08
#> 921 4773 Stensved 55.0 12.03
#> 922 4780 Stege 55.0 12.29
#> 923 4791 Borre 55.0 12.47
#> 924 4792 Askeby 54.9 12.16
#> 925 4793 Bogø By 54.9 12.05
#> 926 5463 Harndrup 55.5 10.02
#> 927 5464 Brenderup Fyn 55.5 9.97
#> 928 5466 Asperup 55.5 9.90
#> 929 5500 Middelfart 55.5 9.76
#> 930 5580 Nørre Aaby 55.5 9.87
#> 931 5591 Gelsted 55.4 9.96
#> 932 5592 Ejby 55.4 9.92
#> 933 5492 Vissenbjerg 55.4 10.14
#> 934 5560 Aarup 55.4 10.05
#> 935 5610 Assens 55.3 9.92
#> 936 5620 Glamsbjerg 55.3 10.09
#> 937 5631 Ebberup 55.2 9.99
#> 938 5683 Haarby 55.2 10.11
#> 939 5690 Tommerup 55.3 10.20
#> 940 5600 Faaborg 55.1 10.25
#> 941 5601 Lyø 55.0 10.15
#> 942 5602 Avernakø 55.0 10.28
#> 943 5603 Bjørnø 55.1 10.25
#> 944 5642 Millinge 55.1 10.17
#> 945 5672 Broby 55.2 10.26
#> 946 5750 Ringe 55.2 10.46
#> 947 5772 Kværndrup 55.2 10.53
#> 948 5792 Årslev 55.3 10.44
#> 949 5854 Gislev 55.2 10.60
#> 950 5856 Ryslinge 55.2 10.54
#> 951 5863 Ferritslev Fyn 55.3 10.58
#> 952 5290 Marslev 55.4 10.52
#> 953 5300 Kerteminde 55.5 10.65
#> 954 5330 Munkebo 55.5 10.55
#> 955 5350 Rynkeby 55.4 10.61
#> 956 5370 Mesinge 55.5 10.63
#> 957 5380 Dalby 55.5 10.67
#> 958 5390 Martofte 55.6 10.63
#> 959 5550 Langeskov 55.4 10.59
#> 960 5540 Ullerslev 55.4 10.66
#> 961 5800 Nyborg 55.3 10.78
#> 962 5853 Ørbæk 55.3 10.66
#> 963 5871 Frørup 55.2 10.76
#> 964 5000 Odense C 55.4 10.39
#> 965 5200 Odense V 55.4 10.33
#> 966 5210 Odense NV 55.4 10.31
#> 967 5220 Odense SØ 55.4 10.46
#> 968 5230 Odense M 55.4 10.40
#> 969 5240 Odense NØ 55.4 10.44
#> 970 5250 Odense SV 55.4 10.34
#> 971 5260 Odense S 55.3 10.39
#> 972 5270 Odense N 55.4 10.36
#> 973 5320 Agedrup 55.4 10.48
#> 974 5491 Blommenslyst 55.4 10.25
#> 975 5700 Svendborg 55.1 10.61
#> 976 5762 Vester Skerninge 55.1 10.46
#> 977 5771 Stenstrup 55.1 10.51
#> 978 5874 Hesselager 55.2 10.77
#> 979 5881 Skårup Fyn 55.1 10.70
#> 980 5882 Vejstrup 55.1 10.71
#> 981 5883 Oure 55.1 10.72
#> 982 5884 Gudme 55.1 10.70
#> 983 5892 Gudbjerg Sydfyn 55.2 10.66
#> 984 5400 Bogense 55.6 10.09
#> 985 5450 Otterup 55.5 10.40
#> 986 5462 Morud 55.4 10.19
#> 987 5471 Søndersø 55.5 10.20
#> 988 5474 Veflinge 55.5 10.15
#> 989 5485 Skamby 55.5 10.28
#> 990 5900 Rudkøbing 54.9 10.74
#> 991 5932 Humble 54.8 10.69
#> 992 5935 Bagenkop 54.8 10.69
#> 993 5943 Strynø 54.9 10.61
#> 994 5953 Tranekær 55.1 10.88
#> 995 5960 Marstal 54.9 10.51
#> 996 5965 Birkholm 54.9 10.50
#> 997 5970 Ærøskøbing 54.9 10.39
#> 998 5985 Søby Ærø 54.9 10.27
#> 999 6100 Haderslev 55.2 9.52
#> 1000 6500 Vojens 55.2 9.30
#> 1001 6510 Gram 55.3 9.03
#> 1002 6541 Bevtoft 55.2 9.20
#> 1003 6560 Sommersted 55.3 9.28
#> 1004 6623 Vorbasse 55.6 9.08
#> 1005 7190 Billund 55.7 9.12
#> 1006 7200 Grindsted 55.8 8.92
#> 1007 7250 Hejnsvig 55.7 8.98
#> 1008 7260 Sønder Omme 55.8 8.90
#> 1009 6300 Gråsten 54.9 9.57
#> 1010 6310 Broager 54.9 9.68
#> 1011 6320 Egernsund 54.9 9.62
#> 1012 6400 Sønderborg 54.9 9.78
#> 1013 6430 Nordborg 55.0 9.79
#> 1014 6440 Augustenborg 55.0 9.92
#> 1015 6470 Sydals 54.9 9.96
#> 1016 6240 Løgumkloster 55.1 8.98
#> 1017 6261 Bredebro 55.1 8.77
#> 1018 6270 Tønder 54.9 8.87
#> 1019 6280 Højer 55.0 8.70
#> 1020 6520 Toftlund 55.2 9.04
#> 1021 6534 Agerskov 55.1 9.14
#> 1022 6535 Branderup J 55.1 9.06
#> 1023 6780 Skærbæk 55.2 8.78
#> 1024 6792 Rømø 55.1 8.54
#> 1025 6690 Gørding 55.5 8.80
#> 1026 6700 Esbjerg 55.5 8.46
#> 1027 6705 Esbjerg Ø 55.5 8.50
#> 1028 6710 Esbjerg V 55.5 8.39
#> 1029 6715 Esbjerg N 55.5 8.46
#> 1030 6731 Tjæreborg 55.5 8.59
#> 1031 6740 Bramming 55.5 8.71
#> 1032 6760 Ribe 55.3 8.77
#> 1033 6771 Gredstedbro 55.4 8.75
#> 1034 6720 Fanø 55.4 8.40
#> 1035 6753 Agerbæk 55.6 8.80
#> 1036 6800 Varde 55.6 8.50
#> 1037 6818 Årre 55.6 8.67
#> 1038 6823 Ansager 55.7 8.75
#> 1039 6830 Nørre Nebel 55.8 8.27
#> 1040 6840 Oksbøl 55.6 8.27
#> 1041 6851 Janderup Vestj 55.6 8.37
#> 1042 6852 Billum 55.6 8.33
#> 1043 6853 Vejers Strand 55.6 8.13
#> 1044 6854 Henne 55.7 8.21
#> 1045 6855 Outrup 55.7 8.35
#> 1046 6857 Blåvand 55.6 8.15
#> 1047 6862 Tistrup 55.7 8.61
#> 1048 6870 Ølgod 55.8 8.62
#> 1049 6600 Vejen 55.5 9.14
#> 1050 6621 Gesten 55.5 9.20
#> 1051 6622 Bække 55.6 9.15
#> 1052 6630 Rødding 55.4 9.11
#> 1053 6650 Brørup 55.5 9.02
#> 1054 6660 Lintrup 55.4 8.98
#> 1055 6670 Holsted 55.5 8.91
#> 1056 6682 Hovborg 55.6 8.94
#> 1057 6683 Føvling 55.4 8.91
#> 1058 6752 Glejbjerg 55.6 8.83
#> 1059 6200 Aabenraa 55.0 9.44
#> 1060 6210 Barsø 55.1 9.56
#> 1061 6230 Rødekro 55.1 9.32
#> 1062 6330 Padborg 54.8 9.35
#> 1063 6340 Kruså 54.9 9.44
#> 1064 6360 Tinglev 54.9 9.24
#> 1065 6372 Bylderup-Bov 55.0 9.10
#> 1066 6392 Bolderslev 55.0 9.27
#> 1067 7000 Fredericia 55.6 9.72
#> 1068 6000 Kolding 55.5 9.48
#> 1069 6051 Almind 55.6 9.48
#> 1070 6052 Viuf 55.6 9.49
#> 1071 6064 Jordrup 55.6 9.31
#> 1072 6070 Christiansfeld 55.4 9.47
#> 1073 6091 Bjert 55.5 9.57
#> 1074 6092 Sønder Stenderup 55.5 9.62
#> 1075 6093 Sjølund 55.4 9.56
#> 1076 6094 Hejls 55.4 9.60
#> 1077 6580 Vamdrup 55.4 9.31
#> 1078 6640 Lunderskov 55.5 9.31
#> 1079 6040 Egtved 55.6 9.35
#> 1080 7080 Børkop 55.6 9.67
#> 1081 7100 Vejle 55.7 9.52
#> 1082 7120 Vejle Øst 55.7 9.61
#> 1083 7173 Vonge 55.9 9.42
#> 1084 7182 Bredsten 55.7 9.36
#> 1085 7183 Randbøl 55.7 9.26
#> 1086 7184 Vandel 55.7 9.21
#> 1087 7300 Jelling 55.8 9.43
#> 1088 7321 Gadbjerg 55.8 9.31
#> 1089 7323 Give 55.9 9.25
#> 1090 9100 Aalborg 57.0 9.92
#> 1091 8100 Aarhus C 56.2 10.21
#> 1092 8245 Risskov Ø 56.2 10.25
#> 1093 5100 Odense C 55.4 10.39
#> 1094 6701 Esbjerg 55.5 8.45
#> 1095 7007 Fredericia 55.6 9.75
#> 1096 900 København C 57.0 9.92
#> 1097 960 Udland 56.8 9.51
#> 1098 999 København C 57.7 10.58
#> 1099 1001 København K 55.7 12.57
#> 1100 1002 København K 55.7 12.57
#> 1101 1003 København K 55.7 12.57
#> 1102 1004 København K 55.7 12.57
#> 1103 1005 København K 55.7 12.57
#> 1104 1006 København K 55.7 12.57
#> 1105 1007 København K 55.7 12.57
#> 1106 1008 København K 55.7 12.57
#> 1107 1009 København K 55.7 12.57
#> 1108 1010 København K 55.7 12.57
#> 1109 1011 København K 55.7 12.57
#> 1110 1012 København K 55.7 12.57
#> 1111 1013 København K 55.7 12.57
#> 1112 1014 København K 55.7 12.57
#> 1113 1015 København K 55.7 12.57
#> 1114 1016 København K 55.7 12.57
#> 1115 1017 København K 55.7 12.57
#> 1116 1018 København K 55.7 12.57
#> 1117 1019 København K 55.7 12.57
#> 1118 1020 København K 55.7 12.57
#> 1119 1021 København K 55.7 12.57
#> 1120 1022 København K 55.7 12.57
#> 1121 1023 København K 55.7 12.57
#> 1122 1024 København K 55.7 12.57
#> 1123 1025 København K 55.7 12.57
#> 1124 1026 København K 55.7 12.57
#> 1125 1092 København K 55.7 12.57
#> 1126 1093 København K 55.7 12.57
#> 1127 1095 København K 55.7 12.57
#> 1128 1098 København K 55.7 12.57
#> 1129 1140 København K 55.7 12.57
#> 1130 1147 København K 55.7 12.57
#> 1131 1148 København K 55.7 12.57
#> 1132 1217 København K 55.7 12.57
#> 1133 1240 København K 55.7 12.57
#> 1134 1448 København K 55.7 12.57
#> 1135 1500 København V 55.7 12.57
#> 1136 1501 København V 55.7 12.57
#> 1137 1502 København V 55.7 12.57
#> 1138 1503 København V 55.7 12.57
#> 1139 1504 København V 55.7 12.57
#> 1140 1505 København V 55.7 12.57
#> 1141 1506 København V 55.7 12.57
#> 1142 1507 København V 55.7 12.57
#> 1143 1508 København V 55.7 12.57
#> 1144 1509 København V 55.7 12.57
#> 1145 1510 København V 55.7 12.57
#> 1146 1513 Centraltastning 55.7 12.57
#> 1147 1592 København V 55.7 12.57
#> 1148 1599 København V 55.7 12.57
#> 1149 1630 København V 55.7 12.57
#> 1150 1780 København V 55.7 12.57
#> 1151 1785 København V 55.7 12.57
#> 1152 1786 København V 55.7 12.57
#> 1153 1787 København V 55.7 12.57
#> 1154 1790 København V 55.7 12.57
#> 1155 1835 Frederiksberg C 55.7 12.53
#> 1156 917 Københavns Pakkecent 55.7 12.57
#> 1157 800 Høje Taastrup 55.6 12.27
#> 1158 1532 København V 55.7 12.57
#> 1159 1533 København V 55.7 12.57
We want to calculate distances between a subset of zip areas:
idx <- sample(1:nrow(zips), 5, replace = F)
dat <- zips[idx,]
dat
#> postal_code place_name latitude longitude
#> 962 5853 Ørbæk 55.3 10.7
#> 425 1854 Frederiksberg C 55.7 12.5
#> 815 4550 Asnæs 55.8 11.5
#> 220 1460 København K 55.7 12.6
#> 887 4951 Nørreballe 54.8 11.4
distanceMat <- matrix(NA, nrow = length(idx), ncol = length(idx))
colnames(distanceMat) <- str_c(dat$postal_code, dat$place_name, sep = " ")
rownames(distanceMat) <- colnames(distanceMat)
distanceMat
#> 5853 Ørbæk 1854 Frederiksberg C 4550 Asnæs 1460 København K 4951 Nørreballe
#> 5853 Ørbæk NA NA NA NA NA
#> 1854 Frederiksberg C NA NA NA NA NA
#> 4550 Asnæs NA NA NA NA NA
#> 1460 København K NA NA NA NA NA
#> 4951 Nørreballe NA NA NA NA NA
We can find average distances between two zip codes in dat
using function:
library(geodist)
getDist <- function(i, j) {
return(geodist(dat[i, ], dat[j, ], measure = "haversine") / 1000) # convert to km (return in meters)
}
getDist(1, 3) # distance between row 1 and 3
#> [,1]
#> [1,] 81.8
Use nested for loops to fill distanceMat
with distances. Assume that the distance from a to b is the same as from b to a. That is, you only have to call the function once for two zip codes.
9.5.5 Exercise (expand_grid)
Consider the solution of Exercise 9.5.4 and assume that you only want to calculate the distance from rows 1 and 5 to rows 2 and 3 in dat
. Modify the solution using expand_grid
so only one loop is used.