class: ur-title, center, middle, title-slide .title[ # BST430 Lecture 11 ] .subtitle[ ## Vectors, matrices and linear algebra ] .author[ ### Tanzy Love, based on the course by Andrew McDavid ] .institute[ ### U of Rochester ] .date[ ### 2021-09-27 (updated: 2024-10-15 by TL) ] --- Here's the [R code in this lecture](l11/l11-linear-algebra-indexing.R) The only dataset is in the nycflights13 library. --- ## Motivation: time series Let's suppose we tabulate the average delay at the NYC airports at every hour during the month of June. ``` r delay_stats = flights %>% filter(month %in% c(3, 6)) %>% mutate(day = factor(day), hour = factor(hour, levels = 0:23), origin = factor(origin), month= factor(month)) %>% group_by(day, hour, origin, month) %>% mutate(n = n(), pos_delay = pmax(0, dep_delay)) %>% group_by(day, hour, origin, month, .drop = FALSE) %>% summarize(n = n(), total_delay = ifelse(n>0, sum(pos_delay, na.rm = TRUE), NA_real_), total_delay_5 = sum(dep_delay > 5, na.rm = TRUE), prop_delay_5 = total_delay_5/n, mean_delay = total_delay/n)%>% group_by(hour, origin, month) %>% mutate(residual_mean_delay = mean_delay - mean(mean_delay, na.rm = TRUE), residual_total_delay = total_delay - mean(total_delay, na.rm = TRUE)) %>% ungroup() delay_june = filter(delay_stats, month == "6") %>% select(month, day:origin, total_delay) ``` --- ## delay_june We show the largest total delay for each hour/origin that is not empty. ``` r delay_june %>% slice_max(n = 1, order_by = total_delay) ``` ``` ## # A tibble: 1 × 5 ## month day hour origin total_delay ## <fct> <fct> <fct> <fct> <dbl> ## 1 6 27 18 LGA 3402 ``` --- ``` r dstat = ggplot(delay_june, aes(x = as.numeric(hour), y = total_delay, color = origin)) + geom_point() + geom_smooth() dstat ``` <img src="l11-linear-algebra-indexing_files/figure-html/unnamed-chunk-4-1.png" width="60%" style="display: block; margin: auto;" /> We see that flights aren't so delayed early in the day, and peak delays occur in the evening. --- ## Detrend ``` r delay_june = delay_june %>% group_by(hour, origin, month) %>% mutate(residual_total_delay = total_delay - mean(total_delay, na.rm = TRUE)) (dstat %+% delay_june) + aes(y = residual_total_delay) ``` <img src="l11-linear-algebra-indexing_files/figure-html/unnamed-chunk-5-1.png" width="60%" style="display: block; margin: auto;" /> --- ## Are delays contagious between airports? First, we'd need to pivot wider. ``` r delay_wide = delay_june %>% pivot_wider(id_cols = day:hour, names_from = origin, values_from = residual_total_delay) %>% ungroup() delay_wide %>% slice(10:15) ``` ``` ## # A tibble: 6 × 5 ## day hour EWR JFK LGA ## <fct> <fct> <dbl> <dbl> <dbl> ## 1 1 9 -108. -146. -166. ## 2 1 10 -69.5 -156. -170. ## 3 1 11 -123. -16.4 -141. ## 4 1 12 -265. -102. 95.2 ## 5 1 13 -332. -72.9 -177. ## 6 1 14 -352. -428. -326. ``` --- ``` r airport_delay_plot = ggplot(delay_wide, aes(x = EWR, y = JFK)) + geom_point(aes(color = as.numeric(hour))) + geom_smooth() + scale_color_viridis_c() airport_delay_plot + labs(title = "Resid. delay (minutes) on each hour") ``` <img src="l11-linear-algebra-indexing_files/figure-html/unnamed-chunk-7-1.png" width="60%" style="display: block; margin: auto;" /> --- ## Are delays contagious across time? .panelset[ .panel[.panel-name[Code] ``` r airport_delay_plot_simple = airport_delay_plot + guides(color = 'none') cowplot::plot_grid( airport_delay_plot_simple + aes(x = JFK, y = dplyr::lag(JFK, n = 1)), airport_delay_plot_simple + aes(x = JFK, y = dplyr::lag(JFK, n = 2)), airport_delay_plot_simple + aes(x = JFK, y = dplyr::lag(JFK, n = 4)), airport_delay_plot_simple + aes(x = JFK, y = dplyr::lag(JFK, n = 8))) ``` ] .panel[.panel-name[Plot] .pull-left[ <img src="l11-linear-algebra-indexing_files/figure-html/unnamed-chunk-8-1.png" width="500px" style="display: block; margin: auto;" /> ] .pull-right[ Really, we'd like to examine the correlation matrix between airports, or the correlation matrix between lags at various airports... ] ] ] --- class: code70 ## To do this, we need the delays as a .alert[matrix.] .pull-left[ Using `reshape2::acast` (preferred, gives sensible rownames) ``` r library(reshape2) delay_matrix = acast(delay_june, day + hour ~ origin, value.var = 'residual_total_delay') delay_matrix ``` ``` ## EWR JFK LGA ## 1_0 NA NA NA ## 1_1 NA NA NA ## 1_2 NA NA NA ## 1_3 NA NA NA ## 1_4 NA NA NA ## 1_5 -9.500 -4.83 -5.28 ## 1_6 -18.767 -9.47 -120.60 ## 1_7 -157.167 -66.10 22.87 ## 1_8 -140.933 -131.90 -146.43 ## 1_9 -108.300 -145.50 -165.87 ## 1_10 -69.533 -156.47 -170.03 ## 1_11 -122.733 -16.37 -140.83 ## 1_12 -264.733 -101.87 95.23 ## 1_13 -332.033 -72.90 -176.77 ## 1_14 -352.333 -428.50 -326.07 ## 1_15 -580.700 -333.93 -545.47 ## 1_16 -664.100 -387.57 -281.90 ## 1_17 -838.967 -536.37 -599.63 ## 1_18 -874.000 -664.63 -787.90 ## 1_19 -751.867 -574.37 -715.00 ## 1_20 -851.300 -533.27 -409.57 ## 1_21 -406.833 -542.30 -322.87 ## 1_22 NA -218.43 NA ## 1_23 NA -82.50 NA ## 2_0 NA NA NA ## 2_1 NA NA NA ## 2_2 NA NA NA ## 2_3 NA NA NA ## 2_4 NA NA NA ## 2_5 5.500 -4.83 NA ## 2_6 -211.767 -66.47 -94.60 ## 2_7 -124.167 -34.10 28.87 ## 2_8 -129.933 -192.90 -95.43 ## 2_9 -70.300 -167.50 -146.87 ## 2_10 -114.533 -151.47 -154.03 ## 2_11 5.267 -128.37 -176.83 ## 2_12 -106.733 -150.87 52.23 ## 2_13 124.967 -37.90 -103.77 ## 2_14 376.667 20.50 -211.07 ## 2_15 824.300 315.07 468.53 ## 2_16 -74.100 173.43 579.10 ## 2_17 659.033 16.63 630.37 ## 2_18 1348.000 865.37 1123.10 ## 2_19 675.133 482.63 519.00 ## 2_20 548.700 232.73 441.43 ## 2_21 745.167 -25.30 263.13 ## 2_22 NA -3.43 19.95 ## 2_23 NA -25.50 NA ## 3_0 NA NA NA ## 3_1 NA NA NA ## 3_2 NA NA NA ## 3_3 NA NA NA ## 3_4 NA NA NA ## 3_5 8.500 -4.83 -5.28 ## 3_6 256.233 -71.47 135.40 ## 3_7 -99.167 -38.10 -31.13 ## 3_8 -27.933 83.10 432.57 ## 3_9 30.700 -102.50 913.13 ## 3_10 0.467 -7.47 693.97 ## 3_11 43.267 -7.37 558.17 ## 3_12 -47.733 5.13 531.23 ## 3_13 -28.033 -23.90 424.23 ## 3_14 456.667 -289.50 359.93 ## 3_15 209.300 -383.93 698.53 ## 3_16 -169.100 -104.57 332.10 ## 3_17 -106.967 -398.37 258.37 ## 3_18 -476.000 -338.63 1475.10 ## 3_19 -61.867 -21.37 706.00 ## 3_20 -295.300 -529.27 385.43 ## 3_21 -24.833 -416.30 432.13 ## 3_22 NA -209.43 -37.05 ## 3_23 NA -67.50 NA ## 4_0 NA NA NA ## 4_1 NA NA NA ## 4_2 NA NA NA ## 4_3 NA NA NA ## 4_4 NA NA NA ## 4_5 -9.500 -4.83 -5.28 ## 4_6 123.233 -51.47 -100.60 ## 4_7 -145.167 -66.10 -76.13 ## 4_8 -181.933 3.10 -4.43 ## 4_9 -25.300 -111.50 100.13 ## 4_10 -188.533 -146.47 -78.03 ## 4_11 -117.733 156.63 -108.83 ## 4_12 -217.733 -143.87 -217.77 ## 4_13 -261.033 -70.90 102.23 ## 4_14 -280.333 -335.50 -263.07 ## 4_15 -348.700 -296.93 -475.47 ## 4_16 -628.100 -141.57 -436.90 ## 4_17 -627.967 -214.37 -684.63 ## 4_18 -747.000 -453.63 -692.90 ## 4_19 -617.867 -739.37 -590.00 ## 4_20 -673.300 -542.27 -391.57 ## 4_21 -283.833 -542.30 -320.87 ## 4_22 NA -216.43 -37.05 ## 4_23 NA -85.50 NA ## 5_0 NA NA NA ## 5_1 NA NA NA ## 5_2 NA NA NA ## 5_3 NA NA NA ## 5_4 NA NA NA ## 5_5 -9.500 -4.83 -5.28 ## 5_6 -124.767 -15.47 -37.60 ## 5_7 -128.167 -76.10 -2.13 ## 5_8 62.067 -145.90 -20.43 ## 5_9 8.700 -77.50 -145.87 ## 5_10 -91.533 -134.47 511.97 ## 5_11 47.267 100.63 -180.83 ## 5_12 -59.733 -68.87 -185.77 ## 5_13 17.967 -70.90 -34.77 ## 5_14 -79.333 -379.50 -257.07 ## 5_15 -487.700 -482.93 -519.47 ## 5_16 -449.100 -521.57 -422.90 ## 5_17 -489.967 -779.37 -780.63 ## 5_18 -684.000 -645.63 -413.90 ## 5_19 -447.867 -796.37 -605.00 ## 5_20 -600.300 -621.27 -147.57 ## 5_21 -374.833 -542.30 -170.87 ## 5_22 NA -218.43 -30.05 ## 5_23 NA -85.50 NA ## 6_0 NA NA NA ## 6_1 NA NA NA ## 6_2 NA NA NA ## 6_3 NA NA NA ## 6_4 NA NA NA ## 6_5 -9.500 -4.83 -5.28 ## 6_6 -43.767 -71.47 -8.60 ## 6_7 -168.167 -51.10 -33.13 ## 6_8 -173.933 -136.90 208.57 ## 6_9 -23.300 -103.50 -109.87 ## 6_10 -53.533 -87.47 -137.03 ## 6_11 -114.733 -126.37 43.17 ## 6_12 -93.733 -146.87 401.23 ## 6_13 -214.033 -76.90 -163.77 ## 6_14 -270.333 -379.50 -26.07 ## 6_15 -661.700 -351.93 -198.47 ## 6_16 -402.100 -445.57 -390.90 ## 6_17 -598.967 -501.37 -467.63 ## 6_18 -713.000 -625.63 -697.90 ## 6_19 -583.867 -688.37 -705.00 ## 6_20 -650.300 -584.27 -327.57 ## 6_21 -89.833 -542.30 -266.87 ## 6_22 NA -205.43 41.95 ## 6_23 NA -85.50 NA ## 7_0 NA NA NA ## 7_1 NA NA NA ## 7_2 NA NA NA ## 7_3 NA NA NA ## 7_4 NA NA NA ## 7_5 1.500 -1.83 -4.28 ## 7_6 -149.767 -10.47 234.40 ## 7_7 -111.167 2.90 329.87 ## 7_8 -63.933 -174.90 -61.43 ## 7_9 -111.300 -113.50 47.13 ## 7_10 -87.533 -137.47 -89.03 ## 7_11 137.267 207.63 33.17 ## 7_12 -116.733 -48.87 7.23 ## 7_13 121.967 10.10 19.23 ## 7_14 289.667 -209.50 -102.07 ## 7_15 -122.700 1.07 -98.47 ## 7_16 258.900 457.43 192.10 ## 7_17 -160.967 875.63 -0.63 ## 7_18 312.000 592.37 23.10 ## 7_19 94.133 1580.63 818.00 ## 7_20 326.700 602.73 259.43 ## 7_21 -13.833 155.70 90.13 ## 7_22 NA -52.43 15.95 ## 7_23 NA -60.50 NA ## 8_0 NA NA NA ## 8_1 NA NA NA ## 8_2 NA NA NA ## 8_3 NA NA NA ## 8_4 NA NA NA ## 8_5 34.500 -4.83 -5.28 ## 8_6 -82.767 -1.47 51.40 ## 8_7 397.833 -7.10 200.87 ## 8_8 0.067 202.10 146.57 ## 8_9 -103.300 -52.50 -29.87 ## 8_10 -5.533 -98.47 -157.03 ## 8_11 -1.733 -127.37 -222.83 ## 8_12 -97.733 -85.87 -244.77 ## 8_13 -188.033 97.10 -205.77 ## 8_14 -411.333 -290.50 43.93 ## 8_15 -550.700 -80.93 -445.47 ## 8_16 -577.100 -367.57 -460.90 ## 8_17 -846.967 -353.37 -658.63 ## 8_18 -783.000 -376.63 -772.90 ## 8_19 -634.867 -596.37 -719.00 ## 8_20 -806.300 -206.27 -409.57 ## 8_21 -348.833 -419.30 -255.87 ## 8_22 NA -218.43 NA ## 8_23 NA -82.50 NA ## 9_0 NA NA NA ## 9_1 NA NA NA ## 9_2 NA NA NA ## 9_3 NA NA NA ## 9_4 NA NA NA ## 9_5 -4.500 -4.83 NA ## 9_6 -224.767 -71.47 -4.60 ## 9_7 -171.167 -43.10 -58.13 ## 9_8 -182.933 -137.90 -68.43 ## 9_9 -54.300 -8.50 -162.87 ## 9_10 -159.533 -130.47 -170.03 ## 9_11 21.267 -127.37 -160.83 ## 9_12 -93.733 -9.87 287.23 ## 9_13 -377.033 -101.90 -30.77 ## 9_14 -283.333 -395.50 -67.07 ## 9_15 -577.700 -133.93 -315.47 ## 9_16 -347.100 -499.57 -115.90 ## 9_17 -466.967 -689.37 -559.63 ## 9_18 -552.000 -643.63 -503.90 ## 9_19 -452.867 -576.37 -642.00 ## 9_20 -649.300 -520.27 -177.57 ## 9_21 -44.833 -520.30 -216.87 ## 9_22 NA -210.43 -20.05 ## 9_23 NA -85.50 NA ## 10_0 NA NA NA ## 10_1 NA NA NA ## 10_2 NA NA NA ## 10_3 NA NA NA ## 10_4 NA NA NA ## 10_5 -9.500 -4.83 -5.28 ## 10_6 328.233 -18.47 -67.60 ## 10_7 -45.167 -46.10 -70.13 ## 10_8 -92.933 -88.90 -148.43 ## 10_9 -76.300 -49.50 -68.87 ## 10_10 228.467 64.53 -57.03 ## 10_11 168.267 -112.37 46.17 ## 10_12 244.267 -25.87 102.23 ## 10_13 315.967 247.10 75.23 ## 10_14 50.667 1098.50 180.93 ## 10_15 362.300 337.07 29.53 ## 10_16 348.900 693.43 174.10 ## 10_17 920.033 470.63 -171.63 ## 10_18 563.000 221.37 313.10 ## 10_19 611.133 632.63 199.00 ## 10_20 471.700 573.73 134.43 ## 10_21 62.167 334.70 -32.87 ## 10_22 NA 298.57 -37.05 ## 10_23 NA -26.50 NA ## 11_0 NA NA NA ## 11_1 NA NA NA ## 11_2 NA NA NA ## 11_3 NA NA NA ## 11_4 NA NA NA ## 11_5 9.500 -4.83 -5.28 ## 11_6 162.233 83.53 -114.60 ## 11_7 -1.167 -69.10 -48.13 ## 11_8 -30.933 100.10 126.57 ## 11_9 58.700 -116.50 -83.87 ## 11_10 134.467 -124.47 -11.03 ## 11_11 33.267 -38.37 -85.83 ## 11_12 -127.733 23.13 -163.77 ## 11_13 -84.033 -105.90 -129.77 ## 11_14 -264.333 -170.50 -189.07 ## 11_15 -153.700 -217.93 -142.47 ## 11_16 7.900 -146.57 62.10 ## 11_17 -442.967 -172.37 -404.63 ## 11_18 -443.000 -119.63 -414.90 ## 11_19 -163.867 22.63 -342.00 ## 11_20 -313.300 109.73 -20.57 ## 11_21 -266.833 -409.30 -87.87 ## 11_22 NA -90.43 0.95 ## 11_23 NA -85.50 NA ## 12_0 NA NA NA ## 12_1 NA NA NA ## 12_2 NA NA NA ## 12_3 NA NA NA ## 12_4 NA NA NA ## 12_5 -9.500 -4.83 25.72 ## 12_6 -230.767 50.53 -77.60 ## 12_7 -105.167 -48.10 -61.13 ## 12_8 189.067 -161.90 -43.43 ## 12_9 89.700 -116.50 -159.87 ## 12_10 -34.533 -135.47 -157.03 ## 12_11 -46.733 -127.37 -168.83 ## 12_12 -158.733 -72.87 -223.77 ## 12_13 -319.033 -111.90 -250.77 ## 12_14 -133.333 -401.50 -301.07 ## 12_15 -406.700 -322.93 -457.47 ## 12_16 -526.100 -252.57 -265.90 ## 12_17 -557.967 -341.37 -631.63 ## 12_18 -804.000 -452.63 -510.90 ## 12_19 -272.867 -424.37 -529.00 ## 12_20 -607.300 -492.27 -368.57 ## 12_21 -275.833 -479.30 -55.87 ## 12_22 NA -196.43 -37.05 ## 12_23 NA -79.50 NA ## 13_0 NA NA NA ## 13_1 NA NA NA ## 13_2 NA NA NA ## 13_3 NA NA NA ## 13_4 NA NA NA ## 13_5 -9.500 -4.83 -0.28 ## 13_6 51.233 -65.47 105.40 ## 13_7 -113.167 270.90 -67.13 ## 13_8 -10.933 84.10 121.57 ## 13_9 185.700 699.50 -0.87 ## 13_10 347.467 129.53 213.97 ## 13_11 301.267 18.63 591.17 ## 13_12 551.267 621.13 999.23 ## 13_13 431.967 457.10 561.23 ## 13_14 284.667 1214.50 717.93 ## 13_15 775.300 407.07 736.53 ## 13_16 322.900 309.43 124.10 ## 13_17 654.033 969.63 373.37 ## 13_18 897.000 25.37 297.10 ## 13_19 966.133 254.63 1473.00 ## 13_20 1199.700 832.73 365.43 ## 13_21 38.167 201.70 581.13 ## 13_22 NA 560.57 111.95 ## 13_23 NA -9.50 NA ## 14_0 NA NA NA ## 14_1 NA NA NA ## 14_2 NA NA NA ## 14_3 NA NA NA ## 14_4 NA NA NA ## 14_5 36.500 -4.83 -5.28 ## 14_6 -35.767 68.53 -10.60 ## 14_7 183.833 -32.10 9.87 ## 14_8 183.067 269.10 146.57 ## 14_9 -21.300 -67.50 47.13 ## 14_10 -162.533 -109.47 -41.03 ## 14_11 36.267 63.63 116.17 ## 14_12 61.267 -101.87 11.23 ## 14_13 173.967 -130.90 64.23 ## 14_14 -372.333 -162.50 -23.07 ## 14_15 -343.700 222.07 82.53 ## 14_16 -160.100 -115.57 -217.90 ## 14_17 107.033 -183.37 1043.37 ## 14_18 -22.000 -343.63 276.10 ## 14_19 -176.867 77.63 508.00 ## 14_20 -117.300 346.73 786.43 ## 14_21 32.167 -133.30 253.13 ## 14_22 NA 31.57 NA ## 14_23 NA -73.50 NA ## 15_0 NA NA NA ## 15_1 NA NA NA ## 15_2 NA NA NA ## 15_3 NA NA NA ## 15_4 NA NA NA ## 15_5 -9.500 33.17 -5.28 ## 15_6 3.233 -3.47 -115.60 ## 15_7 -9.167 -68.10 -51.13 ## 15_8 -18.933 -155.90 -137.43 ## 15_9 -45.300 -98.50 -90.87 ## 15_10 -44.533 -143.47 -138.03 ## 15_11 -152.733 164.63 -24.83 ## 15_12 -198.733 -124.87 -204.77 ## 15_13 -351.033 -116.90 -92.77 ## 15_14 178.667 -95.50 -283.07 ## 15_15 -214.700 -105.93 -486.47 ## 15_16 -676.100 -336.57 -402.90 ## 15_17 -819.967 -534.37 -406.63 ## 15_18 -607.000 -322.63 -772.90 ## 15_19 -427.867 670.63 -755.00 ## 15_20 -768.300 -604.27 -409.57 ## 15_21 -304.833 -480.30 -322.87 ## 15_22 NA -195.43 NA ## 15_23 NA -85.50 NA ## 16_0 NA NA NA ## 16_1 NA NA NA ## 16_2 NA NA NA ## 16_3 NA NA NA ## 16_4 NA NA NA ## 16_5 -9.500 1.17 NA ## 16_6 -148.767 14.53 -111.60 ## 16_7 -163.167 -47.10 -50.13 ## 16_8 -170.933 -155.90 -86.43 ## 16_9 -100.300 51.50 -129.87 ## 16_10 -217.533 -108.47 -160.03 ## 16_11 -106.733 30.63 -223.83 ## 16_12 -34.733 -130.87 -92.77 ## 16_13 -470.033 -86.90 -86.77 ## 16_14 -67.333 -384.50 -144.07 ## 16_15 -214.700 -488.93 -204.47 ## 16_16 -304.100 -399.57 -222.90 ## 16_17 -623.967 -679.37 -491.63 ## 16_18 -530.000 -573.63 -573.90 ## 16_19 -366.867 -769.37 -443.00 ## 16_20 -503.300 -526.27 -292.57 ## 16_21 -281.833 -337.30 -157.87 ## 16_22 NA -185.43 102.95 ## 16_23 NA -85.50 NA ## 17_0 NA NA NA ## 17_1 NA NA NA ## 17_2 NA NA NA ## 17_3 NA NA NA ## 17_4 NA NA NA ## 17_5 -9.500 -3.83 10.72 ## 17_6 -212.767 16.53 586.40 ## 17_7 -65.167 -17.10 -25.13 ## 17_8 374.067 -144.90 -55.43 ## 17_9 -120.300 -64.50 -3.87 ## 17_10 19.467 -85.47 77.97 ## 17_11 -55.733 46.63 -131.83 ## 17_12 -257.733 143.13 -106.77 ## 17_13 -175.033 -136.90 -106.77 ## 17_14 -218.333 -124.50 2.93 ## 17_15 117.300 108.07 50.53 ## 17_16 488.900 800.43 360.10 ## 17_17 258.033 412.63 816.37 ## 17_18 -105.000 -168.63 158.10 ## 17_19 652.133 573.63 541.00 ## 17_20 173.700 284.73 489.43 ## 17_21 252.167 86.70 78.13 ## 17_22 NA 182.57 34.95 ## 17_23 NA -85.50 NA ## 18_0 NA NA NA ## 18_1 NA NA NA ## 18_2 NA NA NA ## 18_3 NA NA NA ## 18_4 NA NA NA ## 18_5 -6.500 -4.83 -5.28 ## 18_6 14.233 -33.47 -43.60 ## 18_7 -114.167 129.90 -69.13 ## 18_8 -68.933 207.10 10.57 ## 18_9 -81.300 -52.50 -25.87 ## 18_10 81.467 -103.47 2.97 ## 18_11 -74.733 -128.37 33.17 ## 18_12 209.267 5.13 20.23 ## 18_13 396.967 -79.90 519.23 ## 18_14 61.667 130.50 1159.93 ## 18_15 517.300 160.07 1213.53 ## 18_16 432.900 463.43 356.10 ## 18_17 483.033 608.63 468.37 ## 18_18 1385.000 111.37 563.10 ## 18_19 1145.133 128.63 620.00 ## 18_20 660.700 372.73 934.43 ## 18_21 306.167 -55.30 216.13 ## 18_22 NA 352.57 36.95 ## 18_23 NA -43.50 NA ## 19_0 NA NA NA ## 19_1 NA NA NA ## 19_2 NA NA NA ## 19_3 NA NA NA ## 19_4 NA NA NA ## 19_5 -9.500 -3.83 -2.28 ## 19_6 -229.767 -70.47 38.40 ## 19_7 -38.167 30.90 -22.13 ## 19_8 -31.933 18.10 -22.43 ## 19_9 -32.300 157.50 -65.87 ## 19_10 -109.533 -58.47 -82.03 ## 19_11 33.267 -128.37 -61.83 ## 19_12 -123.733 -47.87 -112.77 ## 19_13 -99.033 -135.90 -130.77 ## 19_14 -285.333 -23.50 -112.07 ## 19_15 -605.700 -455.93 -199.47 ## 19_16 -369.100 -470.57 -277.90 ## 19_17 -675.967 -678.37 -467.63 ## 19_18 -300.000 -341.63 -660.90 ## 19_19 -672.867 -397.37 -457.00 ## 19_20 -558.300 -384.27 -12.57 ## 19_21 -161.833 -479.30 -117.87 ## 19_22 NA -217.43 -37.05 ## 19_23 NA -77.50 NA ## 20_0 NA NA NA ## 20_1 NA NA NA ## 20_2 NA NA NA ## 20_3 NA NA NA ## 20_4 NA NA NA ## 20_5 3.500 -3.83 -5.28 ## 20_6 -120.767 2.53 -74.60 ## 20_7 -39.167 13.90 -32.13 ## 20_8 -109.933 -140.90 -105.43 ## 20_9 -70.300 -108.50 -135.87 ## 20_10 -236.533 -73.47 -165.03 ## 20_11 -132.733 -128.37 -104.83 ## 20_12 -81.733 -86.87 -198.77 ## 20_13 -244.033 -107.90 -168.77 ## 20_14 -356.333 -331.50 -160.07 ## 20_15 -489.700 -401.93 -477.47 ## 20_16 -529.100 -509.57 -418.90 ## 20_17 -672.967 -572.37 -794.63 ## 20_18 -709.000 -531.63 -764.90 ## 20_19 -581.867 -663.37 -653.00 ## 20_20 -529.300 -389.27 -214.57 ## 20_21 -372.833 -185.30 -309.87 ## 20_22 NA -206.43 -28.05 ## 20_23 NA -43.50 NA ## 21_0 NA NA NA ## 21_1 NA NA NA ## 21_2 NA NA NA ## 21_3 NA NA NA ## 21_4 NA NA NA ## 21_5 -9.500 -4.83 -5.28 ## 21_6 24.233 -66.47 -91.60 ## 21_7 -55.167 4.90 -25.13 ## 21_8 -71.933 -168.90 89.57 ## 21_9 -110.300 44.50 -100.87 ## 21_10 -100.533 -89.47 -99.03 ## 21_11 102.267 -99.37 -152.83 ## 21_12 -118.733 -36.87 143.23 ## 21_13 160.967 -120.90 -12.77 ## 21_14 -370.333 -378.50 -324.07 ## 21_15 -498.700 -283.93 -237.47 ## 21_16 -408.100 -50.57 -240.90 ## 21_17 -338.967 -294.37 -271.63 ## 21_18 -299.000 -496.63 -455.90 ## 21_19 -124.867 -446.37 -553.00 ## 21_20 -170.300 -444.27 -273.57 ## 21_21 43.167 -216.30 -229.87 ## 21_22 NA -137.43 NA ## 21_23 NA -55.50 NA ## 22_0 NA NA NA ## 22_1 NA NA NA ## 22_2 NA NA NA ## 22_3 NA NA NA ## 22_4 NA NA NA ## 22_5 -6.500 17.17 -0.28 ## 22_6 144.233 -34.47 -70.60 ## 22_7 192.833 -66.10 28.87 ## 22_8 178.067 15.10 -113.43 ## 22_9 -67.300 -29.50 -159.87 ## 22_10 -39.533 -7.47 -150.03 ## 22_11 -105.733 170.63 -99.83 ## 22_12 -115.733 31.13 -212.77 ## 22_13 -270.033 -27.90 -172.77 ## 22_14 -374.333 -425.50 -352.07 ## 22_15 -615.700 -403.93 -469.47 ## 22_16 -133.100 -496.57 -259.90 ## 22_17 -640.967 -673.37 -445.63 ## 22_18 -655.000 -465.63 -787.90 ## 22_19 -607.867 -748.37 -704.00 ## 22_20 -780.300 43.73 -409.57 ## 22_21 -317.833 -331.30 -322.87 ## 22_22 NA -171.43 NA ## 22_23 NA 39.50 NA ## 23_0 NA NA NA ## 23_1 NA NA NA ## 23_2 NA NA NA ## 23_3 NA NA NA ## 23_4 NA NA NA ## 23_5 -9.500 -4.83 NA ## 23_6 -239.767 -32.47 -36.60 ## 23_7 -185.167 -44.10 -74.13 ## 23_8 -69.933 -126.90 -98.43 ## 23_9 -22.300 161.50 -106.87 ## 23_10 -16.533 168.53 -156.03 ## 23_11 -57.733 -112.37 -141.83 ## 23_12 -229.733 366.13 -211.77 ## 23_13 -330.033 -149.90 -143.77 ## 23_14 -188.333 -143.50 -182.07 ## 23_15 -678.700 259.07 -247.47 ## 23_16 -592.100 -163.57 -167.90 ## 23_17 -385.967 282.63 -434.63 ## 23_18 -682.000 346.37 -646.90 ## 23_19 -401.867 -0.37 -440.00 ## 23_20 -438.300 -247.27 -254.57 ## 23_21 189.167 72.70 -277.87 ## 23_22 NA -50.43 -37.05 ## 23_23 NA -4.50 NA ## 24_0 NA NA NA ## 24_1 NA NA NA ## 24_2 NA NA NA ## 24_3 NA NA NA ## 24_4 NA NA NA ## 24_5 8.500 1.17 -3.28 ## 24_6 13.233 11.53 -91.60 ## 24_7 22.833 29.90 60.87 ## 24_8 85.067 -42.90 -136.43 ## 24_9 60.700 -56.50 -0.87 ## 24_10 193.467 389.53 363.97 ## 24_11 -94.733 -8.37 -118.83 ## 24_12 304.267 -29.87 -45.77 ## 24_13 67.967 90.10 331.23 ## 24_14 425.667 1352.50 574.93 ## 24_15 1721.300 1141.07 899.53 ## 24_16 923.900 714.43 1177.10 ## 24_17 998.033 1345.63 1728.37 ## 24_18 506.000 1060.37 1130.10 ## 24_19 385.133 278.63 1074.00 ## 24_20 589.700 419.73 96.43 ## 24_21 593.167 1202.70 291.13 ## 24_22 NA 76.57 -37.05 ## 24_23 NA 45.50 NA ## 25_0 NA NA NA ## 25_1 NA NA NA ## 25_2 NA NA NA ## 25_3 NA NA NA ## 25_4 NA NA NA ## 25_5 -3.500 -4.83 -5.28 ## 25_6 281.233 66.53 -105.60 ## 25_7 313.833 48.90 -59.13 ## 25_8 272.067 554.10 -111.43 ## 25_9 522.700 288.50 391.13 ## 25_10 121.467 437.53 158.97 ## 25_11 -0.733 127.63 296.17 ## 25_12 425.267 -13.87 -153.77 ## 25_13 485.967 264.10 -53.77 ## 25_14 82.667 650.50 -203.07 ## 25_15 611.300 511.07 -99.47 ## 25_16 1176.900 431.43 -155.90 ## 25_17 2074.033 455.63 1068.37 ## 25_18 709.000 1344.37 1282.10 ## 25_19 475.133 615.63 1245.00 ## 25_20 895.700 1008.73 459.43 ## 25_21 151.167 915.70 284.13 ## 25_22 NA 280.57 -37.05 ## 25_23 NA 267.50 NA ## 26_0 NA NA NA ## 26_1 NA NA NA ## 26_2 NA NA NA ## 26_3 NA NA NA ## 26_4 NA NA NA ## 26_5 -9.500 -1.83 53.72 ## 26_6 351.233 99.53 549.40 ## 26_7 800.833 -26.10 21.87 ## 26_8 100.067 181.10 289.57 ## 26_9 81.700 -35.50 245.13 ## 26_10 358.467 371.53 98.97 ## 26_11 276.267 24.63 319.17 ## 26_12 130.267 92.13 -46.77 ## 26_13 500.967 137.10 25.23 ## 26_14 474.667 231.50 -160.07 ## 26_15 300.300 -14.93 -145.47 ## 26_16 123.900 -17.57 9.10 ## 26_17 178.033 -12.37 -227.63 ## 26_18 375.000 132.37 -231.90 ## 26_19 499.133 35.63 163.00 ## 26_20 1091.700 242.73 43.43 ## 26_21 495.167 297.70 211.13 ## 26_22 NA 290.57 -10.05 ## 26_23 NA 149.50 NA ## 27_0 NA NA NA ## 27_1 NA NA NA ## 27_2 NA NA NA ## 27_3 NA NA NA ## 27_4 NA NA NA ## 27_5 46.500 23.17 -3.28 ## 27_6 13.233 36.53 -109.60 ## 27_7 51.833 -0.10 -31.13 ## 27_8 -66.933 66.10 -65.43 ## 27_9 81.700 102.50 26.13 ## 27_10 50.467 103.53 71.97 ## 27_11 -8.733 43.63 -108.83 ## 27_12 156.267 162.13 -46.77 ## 27_13 139.967 57.10 -209.77 ## 27_14 617.667 557.50 16.93 ## 27_15 651.300 360.07 -2.47 ## 27_16 1068.900 -107.57 -18.90 ## 27_17 896.033 972.63 1114.37 ## 27_18 1183.000 1226.37 2539.10 ## 27_19 429.133 1129.63 31.00 ## 27_20 1319.700 591.73 -292.57 ## 27_21 -71.833 1198.70 501.13 ## 27_22 NA 479.57 -37.05 ## 27_23 NA 280.50 NA ## 28_0 NA NA NA ## 28_1 NA NA NA ## 28_2 NA NA NA ## 28_3 NA NA NA ## 28_4 NA NA NA ## 28_5 -8.500 -4.83 -0.28 ## 28_6 119.233 209.53 -67.60 ## 28_7 0.833 223.90 137.87 ## 28_8 117.067 329.10 82.57 ## 28_9 29.700 224.50 -23.87 ## 28_10 191.467 357.53 150.97 ## 28_11 54.267 -78.37 71.17 ## 28_12 98.267 40.13 107.23 ## 28_13 780.967 82.10 147.23 ## 28_14 294.667 286.50 521.93 ## 28_15 -237.700 430.07 701.53 ## 28_16 512.900 468.43 370.10 ## 28_17 873.033 825.63 929.37 ## 28_18 2264.000 956.37 923.10 ## 28_19 913.133 911.63 1506.00 ## 28_20 1903.700 1052.73 14.43 ## 28_21 579.167 1474.70 554.13 ## 28_22 NA -0.43 NA ## 28_23 NA 198.50 NA ## 29_0 NA NA NA ## 29_1 NA NA NA ## 29_2 NA NA NA ## 29_3 NA NA NA ## 29_4 NA NA NA ## 29_5 -7.500 26.17 -2.28 ## 29_6 85.233 34.53 -59.60 ## 29_7 179.833 86.90 121.87 ## 29_8 183.067 5.10 15.57 ## 29_9 98.700 7.50 260.13 ## 29_10 167.467 128.53 -57.03 ## 29_11 -16.733 169.63 -41.83 ## 29_12 318.267 39.13 -238.77 ## 29_13 -145.033 -127.90 137.23 ## 29_14 -6.333 95.50 -62.07 ## 29_15 -105.700 134.07 -126.47 ## 29_16 -274.100 284.43 -20.90 ## 29_17 -374.967 -536.37 -601.63 ## 29_18 -777.000 138.37 -805.90 ## 29_19 -318.867 -80.37 -749.00 ## 29_20 -702.300 -168.27 -409.57 ## 29_21 -275.833 -32.30 -308.87 ## 29_22 NA -1.43 NA ## 29_23 NA 198.50 NA ## 30_0 NA NA NA ## 30_1 NA NA NA ## 30_2 NA NA NA ## 30_3 NA NA NA ## 30_4 NA NA NA ## 30_5 15.500 0.17 NA ## 30_6 104.233 -0.47 -85.60 ## 30_7 -106.167 2.90 -77.13 ## 30_8 -97.933 -9.90 -149.43 ## 30_9 -5.300 -59.50 -110.87 ## 30_10 -162.533 -61.47 -117.03 ## 30_11 -48.733 169.63 349.17 ## 30_12 47.267 -99.87 -49.77 ## 30_13 166.967 453.10 -131.77 ## 30_14 719.667 -288.50 168.93 ## 30_15 1805.300 375.07 1013.53 ## 30_16 1615.900 738.43 1044.10 ## 30_17 1572.033 914.63 670.37 ## 30_18 1220.000 544.37 393.10 ## 30_19 822.133 127.63 198.00 ## 30_20 832.700 77.73 411.43 ## 30_21 430.167 748.70 23.13 ## 30_22 NA 452.57 55.95 ## 30_23 NA 236.50 NA ## 31_0 NA NA NA ## 31_1 NA NA NA ## 31_2 NA NA NA ## 31_3 NA NA NA ## 31_4 NA NA NA ## 31_5 NA NA NA ## 31_6 NA NA NA ## 31_7 NA NA NA ## 31_8 NA NA NA ## 31_9 NA NA NA ## 31_10 NA NA NA ## 31_11 NA NA NA ## 31_12 NA NA NA ## 31_13 NA NA NA ## 31_14 NA NA NA ## 31_15 NA NA NA ## 31_16 NA NA NA ## 31_17 NA NA NA ## 31_18 NA NA NA ## 31_19 NA NA NA ## 31_20 NA NA NA ## 31_21 NA NA NA ## 31_22 NA NA NA ## 31_23 NA NA NA ``` ] .pull-right[ Or casting with `as.matrix` (simple) ``` r delay_matrix2 = delay_wide %>% select(EWR:LGA) %>% as.matrix delay_matrix2 ``` ``` ## EWR JFK LGA ## [1,] NA NA NA ## [2,] NA NA NA ## [3,] NA NA NA ## [4,] NA NA NA ## [5,] NA NA NA ## [6,] -9.500 -4.83 -5.28 ## [7,] -18.767 -9.47 -120.60 ## [8,] -157.167 -66.10 22.87 ## [9,] -140.933 -131.90 -146.43 ## [10,] -108.300 -145.50 -165.87 ## [11,] -69.533 -156.47 -170.03 ## [12,] -122.733 -16.37 -140.83 ## [13,] -264.733 -101.87 95.23 ## [14,] -332.033 -72.90 -176.77 ## [15,] -352.333 -428.50 -326.07 ## [16,] -580.700 -333.93 -545.47 ## [17,] -664.100 -387.57 -281.90 ## [18,] -838.967 -536.37 -599.63 ## [19,] -874.000 -664.63 -787.90 ## [20,] -751.867 -574.37 -715.00 ## [21,] -851.300 -533.27 -409.57 ## [22,] -406.833 -542.30 -322.87 ## [23,] NA -218.43 NA ## [24,] NA -82.50 NA ## [25,] NA NA NA ## [26,] NA NA NA ## [27,] NA NA NA ## [28,] NA NA NA ## [29,] NA NA NA ## [30,] 5.500 -4.83 NA ## [31,] -211.767 -66.47 -94.60 ## [32,] -124.167 -34.10 28.87 ## [33,] -129.933 -192.90 -95.43 ## [34,] -70.300 -167.50 -146.87 ## [35,] -114.533 -151.47 -154.03 ## [36,] 5.267 -128.37 -176.83 ## [37,] -106.733 -150.87 52.23 ## [38,] 124.967 -37.90 -103.77 ## [39,] 376.667 20.50 -211.07 ## [40,] 824.300 315.07 468.53 ## [41,] -74.100 173.43 579.10 ## [42,] 659.033 16.63 630.37 ## [43,] 1348.000 865.37 1123.10 ## [44,] 675.133 482.63 519.00 ## [45,] 548.700 232.73 441.43 ## [46,] 745.167 -25.30 263.13 ## [47,] NA -3.43 19.95 ## [48,] NA -25.50 NA ## [49,] NA NA NA ## [50,] NA NA NA ## [51,] NA NA NA ## [52,] NA NA NA ## [53,] NA NA NA ## [54,] 8.500 -4.83 -5.28 ## [55,] 256.233 -71.47 135.40 ## [56,] -99.167 -38.10 -31.13 ## [57,] -27.933 83.10 432.57 ## [58,] 30.700 -102.50 913.13 ## [59,] 0.467 -7.47 693.97 ## [60,] 43.267 -7.37 558.17 ## [61,] -47.733 5.13 531.23 ## [62,] -28.033 -23.90 424.23 ## [63,] 456.667 -289.50 359.93 ## [64,] 209.300 -383.93 698.53 ## [65,] -169.100 -104.57 332.10 ## [66,] -106.967 -398.37 258.37 ## [67,] -476.000 -338.63 1475.10 ## [68,] -61.867 -21.37 706.00 ## [69,] -295.300 -529.27 385.43 ## [70,] -24.833 -416.30 432.13 ## [71,] NA -209.43 -37.05 ## [72,] NA -67.50 NA ## [73,] NA NA NA ## [74,] NA NA NA ## [75,] NA NA NA ## [76,] NA NA NA ## [77,] NA NA NA ## [78,] -9.500 -4.83 -5.28 ## [79,] 123.233 -51.47 -100.60 ## [80,] -145.167 -66.10 -76.13 ## [81,] -181.933 3.10 -4.43 ## [82,] -25.300 -111.50 100.13 ## [83,] -188.533 -146.47 -78.03 ## [84,] -117.733 156.63 -108.83 ## [85,] -217.733 -143.87 -217.77 ## [86,] -261.033 -70.90 102.23 ## [87,] -280.333 -335.50 -263.07 ## [88,] -348.700 -296.93 -475.47 ## [89,] -628.100 -141.57 -436.90 ## [90,] -627.967 -214.37 -684.63 ## [91,] -747.000 -453.63 -692.90 ## [92,] -617.867 -739.37 -590.00 ## [93,] -673.300 -542.27 -391.57 ## [94,] -283.833 -542.30 -320.87 ## [95,] NA -216.43 -37.05 ## [96,] NA -85.50 NA ## [97,] NA NA NA ## [98,] NA NA NA ## [99,] NA NA NA ## [100,] NA NA NA ## [101,] NA NA NA ## [102,] -9.500 -4.83 -5.28 ## [103,] -124.767 -15.47 -37.60 ## [104,] -128.167 -76.10 -2.13 ## [105,] 62.067 -145.90 -20.43 ## [106,] 8.700 -77.50 -145.87 ## [107,] -91.533 -134.47 511.97 ## [108,] 47.267 100.63 -180.83 ## [109,] -59.733 -68.87 -185.77 ## [110,] 17.967 -70.90 -34.77 ## [111,] -79.333 -379.50 -257.07 ## [112,] -487.700 -482.93 -519.47 ## [113,] -449.100 -521.57 -422.90 ## [114,] -489.967 -779.37 -780.63 ## [115,] -684.000 -645.63 -413.90 ## [116,] -447.867 -796.37 -605.00 ## [117,] -600.300 -621.27 -147.57 ## [118,] -374.833 -542.30 -170.87 ## [119,] NA -218.43 -30.05 ## [120,] NA -85.50 NA ## [121,] NA NA NA ## [122,] NA NA NA ## [123,] NA NA NA ## [124,] NA NA NA ## [125,] NA NA NA ## [126,] -9.500 -4.83 -5.28 ## [127,] -43.767 -71.47 -8.60 ## [128,] -168.167 -51.10 -33.13 ## [129,] -173.933 -136.90 208.57 ## [130,] -23.300 -103.50 -109.87 ## [131,] -53.533 -87.47 -137.03 ## [132,] -114.733 -126.37 43.17 ## [133,] -93.733 -146.87 401.23 ## [134,] -214.033 -76.90 -163.77 ## [135,] -270.333 -379.50 -26.07 ## [136,] -661.700 -351.93 -198.47 ## [137,] -402.100 -445.57 -390.90 ## [138,] -598.967 -501.37 -467.63 ## [139,] -713.000 -625.63 -697.90 ## [140,] -583.867 -688.37 -705.00 ## [141,] -650.300 -584.27 -327.57 ## [142,] -89.833 -542.30 -266.87 ## [143,] NA -205.43 41.95 ## [144,] NA -85.50 NA ## [145,] NA NA NA ## [146,] NA NA NA ## [147,] NA NA NA ## [148,] NA NA NA ## [149,] NA NA NA ## [150,] 1.500 -1.83 -4.28 ## [151,] -149.767 -10.47 234.40 ## [152,] -111.167 2.90 329.87 ## [153,] -63.933 -174.90 -61.43 ## [154,] -111.300 -113.50 47.13 ## [155,] -87.533 -137.47 -89.03 ## [156,] 137.267 207.63 33.17 ## [157,] -116.733 -48.87 7.23 ## [158,] 121.967 10.10 19.23 ## [159,] 289.667 -209.50 -102.07 ## [160,] -122.700 1.07 -98.47 ## [161,] 258.900 457.43 192.10 ## [162,] -160.967 875.63 -0.63 ## [163,] 312.000 592.37 23.10 ## [164,] 94.133 1580.63 818.00 ## [165,] 326.700 602.73 259.43 ## [166,] -13.833 155.70 90.13 ## [167,] NA -52.43 15.95 ## [168,] NA -60.50 NA ## [169,] NA NA NA ## [170,] NA NA NA ## [171,] NA NA NA ## [172,] NA NA NA ## [173,] NA NA NA ## [174,] 34.500 -4.83 -5.28 ## [175,] -82.767 -1.47 51.40 ## [176,] 397.833 -7.10 200.87 ## [177,] 0.067 202.10 146.57 ## [178,] -103.300 -52.50 -29.87 ## [179,] -5.533 -98.47 -157.03 ## [180,] -1.733 -127.37 -222.83 ## [181,] -97.733 -85.87 -244.77 ## [182,] -188.033 97.10 -205.77 ## [183,] -411.333 -290.50 43.93 ## [184,] -550.700 -80.93 -445.47 ## [185,] -577.100 -367.57 -460.90 ## [186,] -846.967 -353.37 -658.63 ## [187,] -783.000 -376.63 -772.90 ## [188,] -634.867 -596.37 -719.00 ## [189,] -806.300 -206.27 -409.57 ## [190,] -348.833 -419.30 -255.87 ## [191,] NA -218.43 NA ## [192,] NA -82.50 NA ## [193,] NA NA NA ## [194,] NA NA NA ## [195,] NA NA NA ## [196,] NA NA NA ## [197,] NA NA NA ## [198,] -4.500 -4.83 NA ## [199,] -224.767 -71.47 -4.60 ## [200,] -171.167 -43.10 -58.13 ## [201,] -182.933 -137.90 -68.43 ## [202,] -54.300 -8.50 -162.87 ## [203,] -159.533 -130.47 -170.03 ## [204,] 21.267 -127.37 -160.83 ## [205,] -93.733 -9.87 287.23 ## [206,] -377.033 -101.90 -30.77 ## [207,] -283.333 -395.50 -67.07 ## [208,] -577.700 -133.93 -315.47 ## [209,] -347.100 -499.57 -115.90 ## [210,] -466.967 -689.37 -559.63 ## [211,] -552.000 -643.63 -503.90 ## [212,] -452.867 -576.37 -642.00 ## [213,] -649.300 -520.27 -177.57 ## [214,] -44.833 -520.30 -216.87 ## [215,] NA -210.43 -20.05 ## [216,] NA -85.50 NA ## [217,] NA NA NA ## [218,] NA NA NA ## [219,] NA NA NA ## [220,] NA NA NA ## [221,] NA NA NA ## [222,] -9.500 -4.83 -5.28 ## [223,] 328.233 -18.47 -67.60 ## [224,] -45.167 -46.10 -70.13 ## [225,] -92.933 -88.90 -148.43 ## [226,] -76.300 -49.50 -68.87 ## [227,] 228.467 64.53 -57.03 ## [228,] 168.267 -112.37 46.17 ## [229,] 244.267 -25.87 102.23 ## [230,] 315.967 247.10 75.23 ## [231,] 50.667 1098.50 180.93 ## [232,] 362.300 337.07 29.53 ## [233,] 348.900 693.43 174.10 ## [234,] 920.033 470.63 -171.63 ## [235,] 563.000 221.37 313.10 ## [236,] 611.133 632.63 199.00 ## [237,] 471.700 573.73 134.43 ## [238,] 62.167 334.70 -32.87 ## [239,] NA 298.57 -37.05 ## [240,] NA -26.50 NA ## [241,] NA NA NA ## [242,] NA NA NA ## [243,] NA NA NA ## [244,] NA NA NA ## [245,] NA NA NA ## [246,] 9.500 -4.83 -5.28 ## [247,] 162.233 83.53 -114.60 ## [248,] -1.167 -69.10 -48.13 ## [249,] -30.933 100.10 126.57 ## [250,] 58.700 -116.50 -83.87 ## [251,] 134.467 -124.47 -11.03 ## [252,] 33.267 -38.37 -85.83 ## [253,] -127.733 23.13 -163.77 ## [254,] -84.033 -105.90 -129.77 ## [255,] -264.333 -170.50 -189.07 ## [256,] -153.700 -217.93 -142.47 ## [257,] 7.900 -146.57 62.10 ## [258,] -442.967 -172.37 -404.63 ## [259,] -443.000 -119.63 -414.90 ## [260,] -163.867 22.63 -342.00 ## [261,] -313.300 109.73 -20.57 ## [262,] -266.833 -409.30 -87.87 ## [263,] NA -90.43 0.95 ## [264,] NA -85.50 NA ## [265,] NA NA NA ## [266,] NA NA NA ## [267,] NA NA NA ## [268,] NA NA NA ## [269,] NA NA NA ## [270,] -9.500 -4.83 25.72 ## [271,] -230.767 50.53 -77.60 ## [272,] -105.167 -48.10 -61.13 ## [273,] 189.067 -161.90 -43.43 ## [274,] 89.700 -116.50 -159.87 ## [275,] -34.533 -135.47 -157.03 ## [276,] -46.733 -127.37 -168.83 ## [277,] -158.733 -72.87 -223.77 ## [278,] -319.033 -111.90 -250.77 ## [279,] -133.333 -401.50 -301.07 ## [280,] -406.700 -322.93 -457.47 ## [281,] -526.100 -252.57 -265.90 ## [282,] -557.967 -341.37 -631.63 ## [283,] -804.000 -452.63 -510.90 ## [284,] -272.867 -424.37 -529.00 ## [285,] -607.300 -492.27 -368.57 ## [286,] -275.833 -479.30 -55.87 ## [287,] NA -196.43 -37.05 ## [288,] NA -79.50 NA ## [289,] NA NA NA ## [290,] NA NA NA ## [291,] NA NA NA ## [292,] NA NA NA ## [293,] NA NA NA ## [294,] -9.500 -4.83 -0.28 ## [295,] 51.233 -65.47 105.40 ## [296,] -113.167 270.90 -67.13 ## [297,] -10.933 84.10 121.57 ## [298,] 185.700 699.50 -0.87 ## [299,] 347.467 129.53 213.97 ## [300,] 301.267 18.63 591.17 ## [301,] 551.267 621.13 999.23 ## [302,] 431.967 457.10 561.23 ## [303,] 284.667 1214.50 717.93 ## [304,] 775.300 407.07 736.53 ## [305,] 322.900 309.43 124.10 ## [306,] 654.033 969.63 373.37 ## [307,] 897.000 25.37 297.10 ## [308,] 966.133 254.63 1473.00 ## [309,] 1199.700 832.73 365.43 ## [310,] 38.167 201.70 581.13 ## [311,] NA 560.57 111.95 ## [312,] NA -9.50 NA ## [313,] NA NA NA ## [314,] NA NA NA ## [315,] NA NA NA ## [316,] NA NA NA ## [317,] NA NA NA ## [318,] 36.500 -4.83 -5.28 ## [319,] -35.767 68.53 -10.60 ## [320,] 183.833 -32.10 9.87 ## [321,] 183.067 269.10 146.57 ## [322,] -21.300 -67.50 47.13 ## [323,] -162.533 -109.47 -41.03 ## [324,] 36.267 63.63 116.17 ## [325,] 61.267 -101.87 11.23 ## [326,] 173.967 -130.90 64.23 ## [327,] -372.333 -162.50 -23.07 ## [328,] -343.700 222.07 82.53 ## [329,] -160.100 -115.57 -217.90 ## [330,] 107.033 -183.37 1043.37 ## [331,] -22.000 -343.63 276.10 ## [332,] -176.867 77.63 508.00 ## [333,] -117.300 346.73 786.43 ## [334,] 32.167 -133.30 253.13 ## [335,] NA 31.57 NA ## [336,] NA -73.50 NA ## [337,] NA NA NA ## [338,] NA NA NA ## [339,] NA NA NA ## [340,] NA NA NA ## [341,] NA NA NA ## [342,] -9.500 33.17 -5.28 ## [343,] 3.233 -3.47 -115.60 ## [344,] -9.167 -68.10 -51.13 ## [345,] -18.933 -155.90 -137.43 ## [346,] -45.300 -98.50 -90.87 ## [347,] -44.533 -143.47 -138.03 ## [348,] -152.733 164.63 -24.83 ## [349,] -198.733 -124.87 -204.77 ## [350,] -351.033 -116.90 -92.77 ## [351,] 178.667 -95.50 -283.07 ## [352,] -214.700 -105.93 -486.47 ## [353,] -676.100 -336.57 -402.90 ## [354,] -819.967 -534.37 -406.63 ## [355,] -607.000 -322.63 -772.90 ## [356,] -427.867 670.63 -755.00 ## [357,] -768.300 -604.27 -409.57 ## [358,] -304.833 -480.30 -322.87 ## [359,] NA -195.43 NA ## [360,] NA -85.50 NA ## [361,] NA NA NA ## [362,] NA NA NA ## [363,] NA NA NA ## [364,] NA NA NA ## [365,] NA NA NA ## [366,] -9.500 1.17 NA ## [367,] -148.767 14.53 -111.60 ## [368,] -163.167 -47.10 -50.13 ## [369,] -170.933 -155.90 -86.43 ## [370,] -100.300 51.50 -129.87 ## [371,] -217.533 -108.47 -160.03 ## [372,] -106.733 30.63 -223.83 ## [373,] -34.733 -130.87 -92.77 ## [374,] -470.033 -86.90 -86.77 ## [375,] -67.333 -384.50 -144.07 ## [376,] -214.700 -488.93 -204.47 ## [377,] -304.100 -399.57 -222.90 ## [378,] -623.967 -679.37 -491.63 ## [379,] -530.000 -573.63 -573.90 ## [380,] -366.867 -769.37 -443.00 ## [381,] -503.300 -526.27 -292.57 ## [382,] -281.833 -337.30 -157.87 ## [383,] NA -185.43 102.95 ## [384,] NA -85.50 NA ## [385,] NA NA NA ## [386,] NA NA NA ## [387,] NA NA NA ## [388,] NA NA NA ## [389,] NA NA NA ## [390,] -9.500 -3.83 10.72 ## [391,] -212.767 16.53 586.40 ## [392,] -65.167 -17.10 -25.13 ## [393,] 374.067 -144.90 -55.43 ## [394,] -120.300 -64.50 -3.87 ## [395,] 19.467 -85.47 77.97 ## [396,] -55.733 46.63 -131.83 ## [397,] -257.733 143.13 -106.77 ## [398,] -175.033 -136.90 -106.77 ## [399,] -218.333 -124.50 2.93 ## [400,] 117.300 108.07 50.53 ## [401,] 488.900 800.43 360.10 ## [402,] 258.033 412.63 816.37 ## [403,] -105.000 -168.63 158.10 ## [404,] 652.133 573.63 541.00 ## [405,] 173.700 284.73 489.43 ## [406,] 252.167 86.70 78.13 ## [407,] NA 182.57 34.95 ## [408,] NA -85.50 NA ## [409,] NA NA NA ## [410,] NA NA NA ## [411,] NA NA NA ## [412,] NA NA NA ## [413,] NA NA NA ## [414,] -6.500 -4.83 -5.28 ## [415,] 14.233 -33.47 -43.60 ## [416,] -114.167 129.90 -69.13 ## [417,] -68.933 207.10 10.57 ## [418,] -81.300 -52.50 -25.87 ## [419,] 81.467 -103.47 2.97 ## [420,] -74.733 -128.37 33.17 ## [421,] 209.267 5.13 20.23 ## [422,] 396.967 -79.90 519.23 ## [423,] 61.667 130.50 1159.93 ## [424,] 517.300 160.07 1213.53 ## [425,] 432.900 463.43 356.10 ## [426,] 483.033 608.63 468.37 ## [427,] 1385.000 111.37 563.10 ## [428,] 1145.133 128.63 620.00 ## [429,] 660.700 372.73 934.43 ## [430,] 306.167 -55.30 216.13 ## [431,] NA 352.57 36.95 ## [432,] NA -43.50 NA ## [433,] NA NA NA ## [434,] NA NA NA ## [435,] NA NA NA ## [436,] NA NA NA ## [437,] NA NA NA ## [438,] -9.500 -3.83 -2.28 ## [439,] -229.767 -70.47 38.40 ## [440,] -38.167 30.90 -22.13 ## [441,] -31.933 18.10 -22.43 ## [442,] -32.300 157.50 -65.87 ## [443,] -109.533 -58.47 -82.03 ## [444,] 33.267 -128.37 -61.83 ## [445,] -123.733 -47.87 -112.77 ## [446,] -99.033 -135.90 -130.77 ## [447,] -285.333 -23.50 -112.07 ## [448,] -605.700 -455.93 -199.47 ## [449,] -369.100 -470.57 -277.90 ## [450,] -675.967 -678.37 -467.63 ## [451,] -300.000 -341.63 -660.90 ## [452,] -672.867 -397.37 -457.00 ## [453,] -558.300 -384.27 -12.57 ## [454,] -161.833 -479.30 -117.87 ## [455,] NA -217.43 -37.05 ## [456,] NA -77.50 NA ## [457,] NA NA NA ## [458,] NA NA NA ## [459,] NA NA NA ## [460,] NA NA NA ## [461,] NA NA NA ## [462,] 3.500 -3.83 -5.28 ## [463,] -120.767 2.53 -74.60 ## [464,] -39.167 13.90 -32.13 ## [465,] -109.933 -140.90 -105.43 ## [466,] -70.300 -108.50 -135.87 ## [467,] -236.533 -73.47 -165.03 ## [468,] -132.733 -128.37 -104.83 ## [469,] -81.733 -86.87 -198.77 ## [470,] -244.033 -107.90 -168.77 ## [471,] -356.333 -331.50 -160.07 ## [472,] -489.700 -401.93 -477.47 ## [473,] -529.100 -509.57 -418.90 ## [474,] -672.967 -572.37 -794.63 ## [475,] -709.000 -531.63 -764.90 ## [476,] -581.867 -663.37 -653.00 ## [477,] -529.300 -389.27 -214.57 ## [478,] -372.833 -185.30 -309.87 ## [479,] NA -206.43 -28.05 ## [480,] NA -43.50 NA ## [481,] NA NA NA ## [482,] NA NA NA ## [483,] NA NA NA ## [484,] NA NA NA ## [485,] NA NA NA ## [486,] -9.500 -4.83 -5.28 ## [487,] 24.233 -66.47 -91.60 ## [488,] -55.167 4.90 -25.13 ## [489,] -71.933 -168.90 89.57 ## [490,] -110.300 44.50 -100.87 ## [491,] -100.533 -89.47 -99.03 ## [492,] 102.267 -99.37 -152.83 ## [493,] -118.733 -36.87 143.23 ## [494,] 160.967 -120.90 -12.77 ## [495,] -370.333 -378.50 -324.07 ## [496,] -498.700 -283.93 -237.47 ## [497,] -408.100 -50.57 -240.90 ## [498,] -338.967 -294.37 -271.63 ## [499,] -299.000 -496.63 -455.90 ## [500,] -124.867 -446.37 -553.00 ## [501,] -170.300 -444.27 -273.57 ## [502,] 43.167 -216.30 -229.87 ## [503,] NA -137.43 NA ## [504,] NA -55.50 NA ## [505,] NA NA NA ## [506,] NA NA NA ## [507,] NA NA NA ## [508,] NA NA NA ## [509,] NA NA NA ## [510,] -6.500 17.17 -0.28 ## [511,] 144.233 -34.47 -70.60 ## [512,] 192.833 -66.10 28.87 ## [513,] 178.067 15.10 -113.43 ## [514,] -67.300 -29.50 -159.87 ## [515,] -39.533 -7.47 -150.03 ## [516,] -105.733 170.63 -99.83 ## [517,] -115.733 31.13 -212.77 ## [518,] -270.033 -27.90 -172.77 ## [519,] -374.333 -425.50 -352.07 ## [520,] -615.700 -403.93 -469.47 ## [521,] -133.100 -496.57 -259.90 ## [522,] -640.967 -673.37 -445.63 ## [523,] -655.000 -465.63 -787.90 ## [524,] -607.867 -748.37 -704.00 ## [525,] -780.300 43.73 -409.57 ## [526,] -317.833 -331.30 -322.87 ## [527,] NA -171.43 NA ## [528,] NA 39.50 NA ## [529,] NA NA NA ## [530,] NA NA NA ## [531,] NA NA NA ## [532,] NA NA NA ## [533,] NA NA NA ## [534,] -9.500 -4.83 NA ## [535,] -239.767 -32.47 -36.60 ## [536,] -185.167 -44.10 -74.13 ## [537,] -69.933 -126.90 -98.43 ## [538,] -22.300 161.50 -106.87 ## [539,] -16.533 168.53 -156.03 ## [540,] -57.733 -112.37 -141.83 ## [541,] -229.733 366.13 -211.77 ## [542,] -330.033 -149.90 -143.77 ## [543,] -188.333 -143.50 -182.07 ## [544,] -678.700 259.07 -247.47 ## [545,] -592.100 -163.57 -167.90 ## [546,] -385.967 282.63 -434.63 ## [547,] -682.000 346.37 -646.90 ## [548,] -401.867 -0.37 -440.00 ## [549,] -438.300 -247.27 -254.57 ## [550,] 189.167 72.70 -277.87 ## [551,] NA -50.43 -37.05 ## [552,] NA -4.50 NA ## [553,] NA NA NA ## [554,] NA NA NA ## [555,] NA NA NA ## [556,] NA NA NA ## [557,] NA NA NA ## [558,] 8.500 1.17 -3.28 ## [559,] 13.233 11.53 -91.60 ## [560,] 22.833 29.90 60.87 ## [561,] 85.067 -42.90 -136.43 ## [562,] 60.700 -56.50 -0.87 ## [563,] 193.467 389.53 363.97 ## [564,] -94.733 -8.37 -118.83 ## [565,] 304.267 -29.87 -45.77 ## [566,] 67.967 90.10 331.23 ## [567,] 425.667 1352.50 574.93 ## [568,] 1721.300 1141.07 899.53 ## [569,] 923.900 714.43 1177.10 ## [570,] 998.033 1345.63 1728.37 ## [571,] 506.000 1060.37 1130.10 ## [572,] 385.133 278.63 1074.00 ## [573,] 589.700 419.73 96.43 ## [574,] 593.167 1202.70 291.13 ## [575,] NA 76.57 -37.05 ## [576,] NA 45.50 NA ## [577,] NA NA NA ## [578,] NA NA NA ## [579,] NA NA NA ## [580,] NA NA NA ## [581,] NA NA NA ## [582,] -3.500 -4.83 -5.28 ## [583,] 281.233 66.53 -105.60 ## [584,] 313.833 48.90 -59.13 ## [585,] 272.067 554.10 -111.43 ## [586,] 522.700 288.50 391.13 ## [587,] 121.467 437.53 158.97 ## [588,] -0.733 127.63 296.17 ## [589,] 425.267 -13.87 -153.77 ## [590,] 485.967 264.10 -53.77 ## [591,] 82.667 650.50 -203.07 ## [592,] 611.300 511.07 -99.47 ## [593,] 1176.900 431.43 -155.90 ## [594,] 2074.033 455.63 1068.37 ## [595,] 709.000 1344.37 1282.10 ## [596,] 475.133 615.63 1245.00 ## [597,] 895.700 1008.73 459.43 ## [598,] 151.167 915.70 284.13 ## [599,] NA 280.57 -37.05 ## [600,] NA 267.50 NA ## [601,] NA NA NA ## [602,] NA NA NA ## [603,] NA NA NA ## [604,] NA NA NA ## [605,] NA NA NA ## [606,] -9.500 -1.83 53.72 ## [607,] 351.233 99.53 549.40 ## [608,] 800.833 -26.10 21.87 ## [609,] 100.067 181.10 289.57 ## [610,] 81.700 -35.50 245.13 ## [611,] 358.467 371.53 98.97 ## [612,] 276.267 24.63 319.17 ## [613,] 130.267 92.13 -46.77 ## [614,] 500.967 137.10 25.23 ## [615,] 474.667 231.50 -160.07 ## [616,] 300.300 -14.93 -145.47 ## [617,] 123.900 -17.57 9.10 ## [618,] 178.033 -12.37 -227.63 ## [619,] 375.000 132.37 -231.90 ## [620,] 499.133 35.63 163.00 ## [621,] 1091.700 242.73 43.43 ## [622,] 495.167 297.70 211.13 ## [623,] NA 290.57 -10.05 ## [624,] NA 149.50 NA ## [625,] NA NA NA ## [626,] NA NA NA ## [627,] NA NA NA ## [628,] NA NA NA ## [629,] NA NA NA ## [630,] 46.500 23.17 -3.28 ## [631,] 13.233 36.53 -109.60 ## [632,] 51.833 -0.10 -31.13 ## [633,] -66.933 66.10 -65.43 ## [634,] 81.700 102.50 26.13 ## [635,] 50.467 103.53 71.97 ## [636,] -8.733 43.63 -108.83 ## [637,] 156.267 162.13 -46.77 ## [638,] 139.967 57.10 -209.77 ## [639,] 617.667 557.50 16.93 ## [640,] 651.300 360.07 -2.47 ## [641,] 1068.900 -107.57 -18.90 ## [642,] 896.033 972.63 1114.37 ## [643,] 1183.000 1226.37 2539.10 ## [644,] 429.133 1129.63 31.00 ## [645,] 1319.700 591.73 -292.57 ## [646,] -71.833 1198.70 501.13 ## [647,] NA 479.57 -37.05 ## [648,] NA 280.50 NA ## [649,] NA NA NA ## [650,] NA NA NA ## [651,] NA NA NA ## [652,] NA NA NA ## [653,] NA NA NA ## [654,] -8.500 -4.83 -0.28 ## [655,] 119.233 209.53 -67.60 ## [656,] 0.833 223.90 137.87 ## [657,] 117.067 329.10 82.57 ## [658,] 29.700 224.50 -23.87 ## [659,] 191.467 357.53 150.97 ## [660,] 54.267 -78.37 71.17 ## [661,] 98.267 40.13 107.23 ## [662,] 780.967 82.10 147.23 ## [663,] 294.667 286.50 521.93 ## [664,] -237.700 430.07 701.53 ## [665,] 512.900 468.43 370.10 ## [666,] 873.033 825.63 929.37 ## [667,] 2264.000 956.37 923.10 ## [668,] 913.133 911.63 1506.00 ## [669,] 1903.700 1052.73 14.43 ## [670,] 579.167 1474.70 554.13 ## [671,] NA -0.43 NA ## [672,] NA 198.50 NA ## [673,] NA NA NA ## [674,] NA NA NA ## [675,] NA NA NA ## [676,] NA NA NA ## [677,] NA NA NA ## [678,] -7.500 26.17 -2.28 ## [679,] 85.233 34.53 -59.60 ## [680,] 179.833 86.90 121.87 ## [681,] 183.067 5.10 15.57 ## [682,] 98.700 7.50 260.13 ## [683,] 167.467 128.53 -57.03 ## [684,] -16.733 169.63 -41.83 ## [685,] 318.267 39.13 -238.77 ## [686,] -145.033 -127.90 137.23 ## [687,] -6.333 95.50 -62.07 ## [688,] -105.700 134.07 -126.47 ## [689,] -274.100 284.43 -20.90 ## [690,] -374.967 -536.37 -601.63 ## [691,] -777.000 138.37 -805.90 ## [692,] -318.867 -80.37 -749.00 ## [693,] -702.300 -168.27 -409.57 ## [694,] -275.833 -32.30 -308.87 ## [695,] NA -1.43 NA ## [696,] NA 198.50 NA ## [697,] NA NA NA ## [698,] NA NA NA ## [699,] NA NA NA ## [700,] NA NA NA ## [701,] NA NA NA ## [702,] 15.500 0.17 NA ## [703,] 104.233 -0.47 -85.60 ## [704,] -106.167 2.90 -77.13 ## [705,] -97.933 -9.90 -149.43 ## [706,] -5.300 -59.50 -110.87 ## [707,] -162.533 -61.47 -117.03 ## [708,] -48.733 169.63 349.17 ## [709,] 47.267 -99.87 -49.77 ## [710,] 166.967 453.10 -131.77 ## [711,] 719.667 -288.50 168.93 ## [712,] 1805.300 375.07 1013.53 ## [713,] 1615.900 738.43 1044.10 ## [714,] 1572.033 914.63 670.37 ## [715,] 1220.000 544.37 393.10 ## [716,] 822.133 127.63 198.00 ## [717,] 832.700 77.73 411.43 ## [718,] 430.167 748.70 23.13 ## [719,] NA 452.57 55.95 ## [720,] NA 236.50 NA ## [721,] NA NA NA ## [722,] NA NA NA ## [723,] NA NA NA ## [724,] NA NA NA ## [725,] NA NA NA ## [726,] NA NA NA ## [727,] NA NA NA ## [728,] NA NA NA ## [729,] NA NA NA ## [730,] NA NA NA ## [731,] NA NA NA ## [732,] NA NA NA ## [733,] NA NA NA ## [734,] NA NA NA ## [735,] NA NA NA ## [736,] NA NA NA ## [737,] NA NA NA ## [738,] NA NA NA ## [739,] NA NA NA ## [740,] NA NA NA ## [741,] NA NA NA ## [742,] NA NA NA ## [743,] NA NA NA ## [744,] NA NA NA ``` ] --- ## Mind your NAs ``` cor(<MATRIX1>, [<MATRIX2>], use = ..., method = c("pearson", "kendall", "spearman")) ``` .pull-left[ ``` r cor(delay_matrix) ``` ``` ## EWR JFK LGA ## EWR 1 NA NA ## JFK NA 1 NA ## LGA NA NA 1 ``` ] .pull-right[ ``` r cor(delay_matrix, use = 'complete') ``` ``` ## EWR JFK LGA ## EWR 1.00 0.69 0.67 ## JFK 0.69 1.00 0.64 ## LGA 0.67 0.64 1.00 ``` ] --- ## A first taste of matrix indexing ``` r delay_matrix$EWR ``` ``` ## Error in delay_matrix$EWR: $ operator is invalid for atomic vectors ``` Need to use brackets ``` r delay_matrix[,'EWR'] # or delay_matrix[,1] ``` ``` ## 1_0 1_1 1_2 1_3 ## NA NA NA NA ## 1_4 1_5 1_6 1_7 ## NA -9.50000000 -18.76666667 -157.16666667 ... ``` --- class: code70 ## A second taste ``` r ## 10th row, 9am delay_matrix[10,] ``` ``` ## EWR JFK LGA ## -108.3000 -145.5000 -165.8667 ``` ``` r ## row titled "10_14", June 10, 2PM. delay_matrix["10_14",] ``` ``` ## EWR JFK LGA ## 50.66667 1098.50000 180.93333 ``` ``` r ## exclude first 7 rows delay_matrix[-(1:7),] ``` ``` ## EWR JFK LGA ## 1_7 -157.16666667 -66.1000000 22.8666667 ## 1_8 -140.93333333 -131.9000000 -146.4333333 ## 1_9 -108.30000000 -145.5000000 -165.8666667 ## 1_10 -69.53333333 -156.4666667 -170.0333333 ## 1_11 -122.73333333 -16.3666667 -140.8333333 ## 1_12 -264.73333333 -101.8666667 95.2333333 ## 1_13 -332.03333333 -72.9000000 -176.7666667 ## 1_14 -352.33333333 -428.5000000 -326.0666667 ## 1_15 -580.70000000 -333.9333333 -545.4666667 ## 1_16 -664.10000000 -387.5666667 -281.9000000 ## 1_17 -838.96666667 -536.3666667 -599.6333333 ## 1_18 -874.00000000 -664.6333333 -787.9000000 ## 1_19 -751.86666667 -574.3666667 -715.0000000 ## 1_20 -851.30000000 -533.2666667 -409.5666667 ## 1_21 -406.83333333 -542.3000000 -322.8666667 ## 1_22 NA -218.4333333 NA ## 1_23 NA -82.5000000 NA ## 2_0 NA NA NA ## 2_1 NA NA NA ## 2_2 NA NA NA ## 2_3 NA NA NA ## 2_4 NA NA NA ## 2_5 5.50000000 -4.8333333 NA ## 2_6 -211.76666667 -66.4666667 -94.6000000 ## 2_7 -124.16666667 -34.1000000 28.8666667 ## 2_8 -129.93333333 -192.9000000 -95.4333333 ## 2_9 -70.30000000 -167.5000000 -146.8666667 ## 2_10 -114.53333333 -151.4666667 -154.0333333 ## 2_11 5.26666667 -128.3666667 -176.8333333 ## 2_12 -106.73333333 -150.8666667 52.2333333 ## 2_13 124.96666667 -37.9000000 -103.7666667 ## 2_14 376.66666667 20.5000000 -211.0666667 ## 2_15 824.30000000 315.0666667 468.5333333 ## 2_16 -74.10000000 173.4333333 579.1000000 ## 2_17 659.03333333 16.6333333 630.3666667 ## 2_18 1348.00000000 865.3666667 1123.1000000 ## 2_19 675.13333333 482.6333333 519.0000000 ## 2_20 548.70000000 232.7333333 441.4333333 ## 2_21 745.16666667 -25.3000000 263.1333333 ## 2_22 NA -3.4333333 19.9545455 ## 2_23 NA -25.5000000 NA ## 3_0 NA NA NA ## 3_1 NA NA NA ## 3_2 NA NA NA ## 3_3 NA NA NA ## 3_4 NA NA NA ## 3_5 8.50000000 -4.8333333 -5.2800000 ## 3_6 256.23333333 -71.4666667 135.4000000 ## 3_7 -99.16666667 -38.1000000 -31.1333333 ## 3_8 -27.93333333 83.1000000 432.5666667 ## 3_9 30.70000000 -102.5000000 913.1333333 ## 3_10 0.46666667 -7.4666667 693.9666667 ## 3_11 43.26666667 -7.3666667 558.1666667 ## 3_12 -47.73333333 5.1333333 531.2333333 ## 3_13 -28.03333333 -23.9000000 424.2333333 ## 3_14 456.66666667 -289.5000000 359.9333333 ## 3_15 209.30000000 -383.9333333 698.5333333 ## 3_16 -169.10000000 -104.5666667 332.1000000 ## 3_17 -106.96666667 -398.3666667 258.3666667 ## 3_18 -476.00000000 -338.6333333 1475.1000000 ## 3_19 -61.86666667 -21.3666667 706.0000000 ## 3_20 -295.30000000 -529.2666667 385.4333333 ## 3_21 -24.83333333 -416.3000000 432.1333333 ## 3_22 NA -209.4333333 -37.0454545 ## 3_23 NA -67.5000000 NA ## 4_0 NA NA NA ## 4_1 NA NA NA ## 4_2 NA NA NA ## 4_3 NA NA NA ## 4_4 NA NA NA ## 4_5 -9.50000000 -4.8333333 -5.2800000 ## 4_6 123.23333333 -51.4666667 -100.6000000 ## 4_7 -145.16666667 -66.1000000 -76.1333333 ## 4_8 -181.93333333 3.1000000 -4.4333333 ## 4_9 -25.30000000 -111.5000000 100.1333333 ## 4_10 -188.53333333 -146.4666667 -78.0333333 ## 4_11 -117.73333333 156.6333333 -108.8333333 ## 4_12 -217.73333333 -143.8666667 -217.7666667 ## 4_13 -261.03333333 -70.9000000 102.2333333 ## 4_14 -280.33333333 -335.5000000 -263.0666667 ## 4_15 -348.70000000 -296.9333333 -475.4666667 ## 4_16 -628.10000000 -141.5666667 -436.9000000 ## 4_17 -627.96666667 -214.3666667 -684.6333333 ## 4_18 -747.00000000 -453.6333333 -692.9000000 ## 4_19 -617.86666667 -739.3666667 -590.0000000 ## 4_20 -673.30000000 -542.2666667 -391.5666667 ## 4_21 -283.83333333 -542.3000000 -320.8666667 ## 4_22 NA -216.4333333 -37.0454545 ## 4_23 NA -85.5000000 NA ## 5_0 NA NA NA ## 5_1 NA NA NA ## 5_2 NA NA NA ## 5_3 NA NA NA ## 5_4 NA NA NA ## 5_5 -9.50000000 -4.8333333 -5.2800000 ## 5_6 -124.76666667 -15.4666667 -37.6000000 ## 5_7 -128.16666667 -76.1000000 -2.1333333 ## 5_8 62.06666667 -145.9000000 -20.4333333 ## 5_9 8.70000000 -77.5000000 -145.8666667 ## 5_10 -91.53333333 -134.4666667 511.9666667 ## 5_11 47.26666667 100.6333333 -180.8333333 ## 5_12 -59.73333333 -68.8666667 -185.7666667 ## 5_13 17.96666667 -70.9000000 -34.7666667 ## 5_14 -79.33333333 -379.5000000 -257.0666667 ## 5_15 -487.70000000 -482.9333333 -519.4666667 ## 5_16 -449.10000000 -521.5666667 -422.9000000 ## 5_17 -489.96666667 -779.3666667 -780.6333333 ## 5_18 -684.00000000 -645.6333333 -413.9000000 ## 5_19 -447.86666667 -796.3666667 -605.0000000 ## 5_20 -600.30000000 -621.2666667 -147.5666667 ## 5_21 -374.83333333 -542.3000000 -170.8666667 ## 5_22 NA -218.4333333 -30.0454545 ## 5_23 NA -85.5000000 NA ## 6_0 NA NA NA ## 6_1 NA NA NA ## 6_2 NA NA NA ## 6_3 NA NA NA ## 6_4 NA NA NA ## 6_5 -9.50000000 -4.8333333 -5.2800000 ## 6_6 -43.76666667 -71.4666667 -8.6000000 ## 6_7 -168.16666667 -51.1000000 -33.1333333 ## 6_8 -173.93333333 -136.9000000 208.5666667 ## 6_9 -23.30000000 -103.5000000 -109.8666667 ## 6_10 -53.53333333 -87.4666667 -137.0333333 ## 6_11 -114.73333333 -126.3666667 43.1666667 ## 6_12 -93.73333333 -146.8666667 401.2333333 ## 6_13 -214.03333333 -76.9000000 -163.7666667 ## 6_14 -270.33333333 -379.5000000 -26.0666667 ## 6_15 -661.70000000 -351.9333333 -198.4666667 ## 6_16 -402.10000000 -445.5666667 -390.9000000 ## 6_17 -598.96666667 -501.3666667 -467.6333333 ## 6_18 -713.00000000 -625.6333333 -697.9000000 ## 6_19 -583.86666667 -688.3666667 -705.0000000 ## 6_20 -650.30000000 -584.2666667 -327.5666667 ## 6_21 -89.83333333 -542.3000000 -266.8666667 ## 6_22 NA -205.4333333 41.9545455 ## 6_23 NA -85.5000000 NA ## 7_0 NA NA NA ## 7_1 NA NA NA ## 7_2 NA NA NA ## 7_3 NA NA NA ## 7_4 NA NA NA ## 7_5 1.50000000 -1.8333333 -4.2800000 ## 7_6 -149.76666667 -10.4666667 234.4000000 ## 7_7 -111.16666667 2.9000000 329.8666667 ## 7_8 -63.93333333 -174.9000000 -61.4333333 ## 7_9 -111.30000000 -113.5000000 47.1333333 ## 7_10 -87.53333333 -137.4666667 -89.0333333 ## 7_11 137.26666667 207.6333333 33.1666667 ## 7_12 -116.73333333 -48.8666667 7.2333333 ## 7_13 121.96666667 10.1000000 19.2333333 ## 7_14 289.66666667 -209.5000000 -102.0666667 ## 7_15 -122.70000000 1.0666667 -98.4666667 ## 7_16 258.90000000 457.4333333 192.1000000 ## 7_17 -160.96666667 875.6333333 -0.6333333 ## 7_18 312.00000000 592.3666667 23.1000000 ## 7_19 94.13333333 1580.6333333 818.0000000 ## 7_20 326.70000000 602.7333333 259.4333333 ## 7_21 -13.83333333 155.7000000 90.1333333 ## 7_22 NA -52.4333333 15.9545455 ## 7_23 NA -60.5000000 NA ## 8_0 NA NA NA ## 8_1 NA NA NA ## 8_2 NA NA NA ## 8_3 NA NA NA ## 8_4 NA NA NA ## 8_5 34.50000000 -4.8333333 -5.2800000 ## 8_6 -82.76666667 -1.4666667 51.4000000 ## 8_7 397.83333333 -7.1000000 200.8666667 ## 8_8 0.06666667 202.1000000 146.5666667 ## 8_9 -103.30000000 -52.5000000 -29.8666667 ## 8_10 -5.53333333 -98.4666667 -157.0333333 ## 8_11 -1.73333333 -127.3666667 -222.8333333 ## 8_12 -97.73333333 -85.8666667 -244.7666667 ## 8_13 -188.03333333 97.1000000 -205.7666667 ## 8_14 -411.33333333 -290.5000000 43.9333333 ## 8_15 -550.70000000 -80.9333333 -445.4666667 ## 8_16 -577.10000000 -367.5666667 -460.9000000 ## 8_17 -846.96666667 -353.3666667 -658.6333333 ## 8_18 -783.00000000 -376.6333333 -772.9000000 ## 8_19 -634.86666667 -596.3666667 -719.0000000 ## 8_20 -806.30000000 -206.2666667 -409.5666667 ## 8_21 -348.83333333 -419.3000000 -255.8666667 ## 8_22 NA -218.4333333 NA ## 8_23 NA -82.5000000 NA ## 9_0 NA NA NA ## 9_1 NA NA NA ## 9_2 NA NA NA ## 9_3 NA NA NA ## 9_4 NA NA NA ## 9_5 -4.50000000 -4.8333333 NA ## 9_6 -224.76666667 -71.4666667 -4.6000000 ## 9_7 -171.16666667 -43.1000000 -58.1333333 ## 9_8 -182.93333333 -137.9000000 -68.4333333 ## 9_9 -54.30000000 -8.5000000 -162.8666667 ## 9_10 -159.53333333 -130.4666667 -170.0333333 ## 9_11 21.26666667 -127.3666667 -160.8333333 ## 9_12 -93.73333333 -9.8666667 287.2333333 ## 9_13 -377.03333333 -101.9000000 -30.7666667 ## 9_14 -283.33333333 -395.5000000 -67.0666667 ## 9_15 -577.70000000 -133.9333333 -315.4666667 ## 9_16 -347.10000000 -499.5666667 -115.9000000 ## 9_17 -466.96666667 -689.3666667 -559.6333333 ## 9_18 -552.00000000 -643.6333333 -503.9000000 ## 9_19 -452.86666667 -576.3666667 -642.0000000 ## 9_20 -649.30000000 -520.2666667 -177.5666667 ## 9_21 -44.83333333 -520.3000000 -216.8666667 ## 9_22 NA -210.4333333 -20.0454545 ## 9_23 NA -85.5000000 NA ## 10_0 NA NA NA ## 10_1 NA NA NA ## 10_2 NA NA NA ## 10_3 NA NA NA ## 10_4 NA NA NA ## 10_5 -9.50000000 -4.8333333 -5.2800000 ## 10_6 328.23333333 -18.4666667 -67.6000000 ## 10_7 -45.16666667 -46.1000000 -70.1333333 ## 10_8 -92.93333333 -88.9000000 -148.4333333 ## 10_9 -76.30000000 -49.5000000 -68.8666667 ## 10_10 228.46666667 64.5333333 -57.0333333 ## 10_11 168.26666667 -112.3666667 46.1666667 ## 10_12 244.26666667 -25.8666667 102.2333333 ## 10_13 315.96666667 247.1000000 75.2333333 ## 10_14 50.66666667 1098.5000000 180.9333333 ## 10_15 362.30000000 337.0666667 29.5333333 ## 10_16 348.90000000 693.4333333 174.1000000 ## 10_17 920.03333333 470.6333333 -171.6333333 ## 10_18 563.00000000 221.3666667 313.1000000 ## 10_19 611.13333333 632.6333333 199.0000000 ## 10_20 471.70000000 573.7333333 134.4333333 ## 10_21 62.16666667 334.7000000 -32.8666667 ## 10_22 NA 298.5666667 -37.0454545 ## 10_23 NA -26.5000000 NA ## 11_0 NA NA NA ## 11_1 NA NA NA ## 11_2 NA NA NA ## 11_3 NA NA NA ## 11_4 NA NA NA ## 11_5 9.50000000 -4.8333333 -5.2800000 ## 11_6 162.23333333 83.5333333 -114.6000000 ## 11_7 -1.16666667 -69.1000000 -48.1333333 ## 11_8 -30.93333333 100.1000000 126.5666667 ## 11_9 58.70000000 -116.5000000 -83.8666667 ## 11_10 134.46666667 -124.4666667 -11.0333333 ## 11_11 33.26666667 -38.3666667 -85.8333333 ## 11_12 -127.73333333 23.1333333 -163.7666667 ## 11_13 -84.03333333 -105.9000000 -129.7666667 ## 11_14 -264.33333333 -170.5000000 -189.0666667 ## 11_15 -153.70000000 -217.9333333 -142.4666667 ## 11_16 7.90000000 -146.5666667 62.1000000 ## 11_17 -442.96666667 -172.3666667 -404.6333333 ## 11_18 -443.00000000 -119.6333333 -414.9000000 ## 11_19 -163.86666667 22.6333333 -342.0000000 ## 11_20 -313.30000000 109.7333333 -20.5666667 ## 11_21 -266.83333333 -409.3000000 -87.8666667 ## 11_22 NA -90.4333333 0.9545455 ## 11_23 NA -85.5000000 NA ## 12_0 NA NA NA ## 12_1 NA NA NA ## 12_2 NA NA NA ## 12_3 NA NA NA ## 12_4 NA NA NA ## 12_5 -9.50000000 -4.8333333 25.7200000 ## 12_6 -230.76666667 50.5333333 -77.6000000 ## 12_7 -105.16666667 -48.1000000 -61.1333333 ## 12_8 189.06666667 -161.9000000 -43.4333333 ## 12_9 89.70000000 -116.5000000 -159.8666667 ## 12_10 -34.53333333 -135.4666667 -157.0333333 ## 12_11 -46.73333333 -127.3666667 -168.8333333 ## 12_12 -158.73333333 -72.8666667 -223.7666667 ## 12_13 -319.03333333 -111.9000000 -250.7666667 ## 12_14 -133.33333333 -401.5000000 -301.0666667 ## 12_15 -406.70000000 -322.9333333 -457.4666667 ## 12_16 -526.10000000 -252.5666667 -265.9000000 ## 12_17 -557.96666667 -341.3666667 -631.6333333 ## 12_18 -804.00000000 -452.6333333 -510.9000000 ## 12_19 -272.86666667 -424.3666667 -529.0000000 ## 12_20 -607.30000000 -492.2666667 -368.5666667 ## 12_21 -275.83333333 -479.3000000 -55.8666667 ## 12_22 NA -196.4333333 -37.0454545 ## 12_23 NA -79.5000000 NA ## 13_0 NA NA NA ## 13_1 NA NA NA ## 13_2 NA NA NA ## 13_3 NA NA NA ## 13_4 NA NA NA ## 13_5 -9.50000000 -4.8333333 -0.2800000 ## 13_6 51.23333333 -65.4666667 105.4000000 ## 13_7 -113.16666667 270.9000000 -67.1333333 ## 13_8 -10.93333333 84.1000000 121.5666667 ## 13_9 185.70000000 699.5000000 -0.8666667 ## 13_10 347.46666667 129.5333333 213.9666667 ## 13_11 301.26666667 18.6333333 591.1666667 ## 13_12 551.26666667 621.1333333 999.2333333 ## 13_13 431.96666667 457.1000000 561.2333333 ## 13_14 284.66666667 1214.5000000 717.9333333 ## 13_15 775.30000000 407.0666667 736.5333333 ## 13_16 322.90000000 309.4333333 124.1000000 ## 13_17 654.03333333 969.6333333 373.3666667 ## 13_18 897.00000000 25.3666667 297.1000000 ## 13_19 966.13333333 254.6333333 1473.0000000 ## 13_20 1199.70000000 832.7333333 365.4333333 ## 13_21 38.16666667 201.7000000 581.1333333 ## 13_22 NA 560.5666667 111.9545455 ## 13_23 NA -9.5000000 NA ## 14_0 NA NA NA ## 14_1 NA NA NA ## 14_2 NA NA NA ## 14_3 NA NA NA ## 14_4 NA NA NA ## 14_5 36.50000000 -4.8333333 -5.2800000 ## 14_6 -35.76666667 68.5333333 -10.6000000 ## 14_7 183.83333333 -32.1000000 9.8666667 ## 14_8 183.06666667 269.1000000 146.5666667 ## 14_9 -21.30000000 -67.5000000 47.1333333 ## 14_10 -162.53333333 -109.4666667 -41.0333333 ## 14_11 36.26666667 63.6333333 116.1666667 ## 14_12 61.26666667 -101.8666667 11.2333333 ## 14_13 173.96666667 -130.9000000 64.2333333 ## 14_14 -372.33333333 -162.5000000 -23.0666667 ## 14_15 -343.70000000 222.0666667 82.5333333 ## 14_16 -160.10000000 -115.5666667 -217.9000000 ## 14_17 107.03333333 -183.3666667 1043.3666667 ## 14_18 -22.00000000 -343.6333333 276.1000000 ## 14_19 -176.86666667 77.6333333 508.0000000 ## 14_20 -117.30000000 346.7333333 786.4333333 ## 14_21 32.16666667 -133.3000000 253.1333333 ## 14_22 NA 31.5666667 NA ## 14_23 NA -73.5000000 NA ## 15_0 NA NA NA ## 15_1 NA NA NA ## 15_2 NA NA NA ## 15_3 NA NA NA ## 15_4 NA NA NA ## 15_5 -9.50000000 33.1666667 -5.2800000 ## 15_6 3.23333333 -3.4666667 -115.6000000 ## 15_7 -9.16666667 -68.1000000 -51.1333333 ## 15_8 -18.93333333 -155.9000000 -137.4333333 ## 15_9 -45.30000000 -98.5000000 -90.8666667 ## 15_10 -44.53333333 -143.4666667 -138.0333333 ## 15_11 -152.73333333 164.6333333 -24.8333333 ## 15_12 -198.73333333 -124.8666667 -204.7666667 ## 15_13 -351.03333333 -116.9000000 -92.7666667 ## 15_14 178.66666667 -95.5000000 -283.0666667 ## 15_15 -214.70000000 -105.9333333 -486.4666667 ## 15_16 -676.10000000 -336.5666667 -402.9000000 ## 15_17 -819.96666667 -534.3666667 -406.6333333 ## 15_18 -607.00000000 -322.6333333 -772.9000000 ## 15_19 -427.86666667 670.6333333 -755.0000000 ## 15_20 -768.30000000 -604.2666667 -409.5666667 ## 15_21 -304.83333333 -480.3000000 -322.8666667 ## 15_22 NA -195.4333333 NA ## 15_23 NA -85.5000000 NA ## 16_0 NA NA NA ## 16_1 NA NA NA ## 16_2 NA NA NA ## 16_3 NA NA NA ## 16_4 NA NA NA ## 16_5 -9.50000000 1.1666667 NA ## 16_6 -148.76666667 14.5333333 -111.6000000 ## 16_7 -163.16666667 -47.1000000 -50.1333333 ## 16_8 -170.93333333 -155.9000000 -86.4333333 ## 16_9 -100.30000000 51.5000000 -129.8666667 ## 16_10 -217.53333333 -108.4666667 -160.0333333 ## 16_11 -106.73333333 30.6333333 -223.8333333 ## 16_12 -34.73333333 -130.8666667 -92.7666667 ## 16_13 -470.03333333 -86.9000000 -86.7666667 ## 16_14 -67.33333333 -384.5000000 -144.0666667 ## 16_15 -214.70000000 -488.9333333 -204.4666667 ## 16_16 -304.10000000 -399.5666667 -222.9000000 ## 16_17 -623.96666667 -679.3666667 -491.6333333 ## 16_18 -530.00000000 -573.6333333 -573.9000000 ## 16_19 -366.86666667 -769.3666667 -443.0000000 ## 16_20 -503.30000000 -526.2666667 -292.5666667 ## 16_21 -281.83333333 -337.3000000 -157.8666667 ## 16_22 NA -185.4333333 102.9545455 ## 16_23 NA -85.5000000 NA ## 17_0 NA NA NA ## 17_1 NA NA NA ## 17_2 NA NA NA ## 17_3 NA NA NA ## 17_4 NA NA NA ## 17_5 -9.50000000 -3.8333333 10.7200000 ## 17_6 -212.76666667 16.5333333 586.4000000 ## 17_7 -65.16666667 -17.1000000 -25.1333333 ## 17_8 374.06666667 -144.9000000 -55.4333333 ## 17_9 -120.30000000 -64.5000000 -3.8666667 ## 17_10 19.46666667 -85.4666667 77.9666667 ## 17_11 -55.73333333 46.6333333 -131.8333333 ## 17_12 -257.73333333 143.1333333 -106.7666667 ## 17_13 -175.03333333 -136.9000000 -106.7666667 ## 17_14 -218.33333333 -124.5000000 2.9333333 ## 17_15 117.30000000 108.0666667 50.5333333 ## 17_16 488.90000000 800.4333333 360.1000000 ## 17_17 258.03333333 412.6333333 816.3666667 ## 17_18 -105.00000000 -168.6333333 158.1000000 ## 17_19 652.13333333 573.6333333 541.0000000 ## 17_20 173.70000000 284.7333333 489.4333333 ## 17_21 252.16666667 86.7000000 78.1333333 ## 17_22 NA 182.5666667 34.9545455 ## 17_23 NA -85.5000000 NA ## 18_0 NA NA NA ## 18_1 NA NA NA ## 18_2 NA NA NA ## 18_3 NA NA NA ## 18_4 NA NA NA ## 18_5 -6.50000000 -4.8333333 -5.2800000 ## 18_6 14.23333333 -33.4666667 -43.6000000 ## 18_7 -114.16666667 129.9000000 -69.1333333 ## 18_8 -68.93333333 207.1000000 10.5666667 ## 18_9 -81.30000000 -52.5000000 -25.8666667 ## 18_10 81.46666667 -103.4666667 2.9666667 ## 18_11 -74.73333333 -128.3666667 33.1666667 ## 18_12 209.26666667 5.1333333 20.2333333 ## 18_13 396.96666667 -79.9000000 519.2333333 ## 18_14 61.66666667 130.5000000 1159.9333333 ## 18_15 517.30000000 160.0666667 1213.5333333 ## 18_16 432.90000000 463.4333333 356.1000000 ## 18_17 483.03333333 608.6333333 468.3666667 ## 18_18 1385.00000000 111.3666667 563.1000000 ## 18_19 1145.13333333 128.6333333 620.0000000 ## 18_20 660.70000000 372.7333333 934.4333333 ## 18_21 306.16666667 -55.3000000 216.1333333 ## 18_22 NA 352.5666667 36.9545455 ## 18_23 NA -43.5000000 NA ## 19_0 NA NA NA ## 19_1 NA NA NA ## 19_2 NA NA NA ## 19_3 NA NA NA ## 19_4 NA NA NA ## 19_5 -9.50000000 -3.8333333 -2.2800000 ## 19_6 -229.76666667 -70.4666667 38.4000000 ## 19_7 -38.16666667 30.9000000 -22.1333333 ## 19_8 -31.93333333 18.1000000 -22.4333333 ## 19_9 -32.30000000 157.5000000 -65.8666667 ## 19_10 -109.53333333 -58.4666667 -82.0333333 ## 19_11 33.26666667 -128.3666667 -61.8333333 ## 19_12 -123.73333333 -47.8666667 -112.7666667 ## 19_13 -99.03333333 -135.9000000 -130.7666667 ## 19_14 -285.33333333 -23.5000000 -112.0666667 ## 19_15 -605.70000000 -455.9333333 -199.4666667 ## 19_16 -369.10000000 -470.5666667 -277.9000000 ## 19_17 -675.96666667 -678.3666667 -467.6333333 ## 19_18 -300.00000000 -341.6333333 -660.9000000 ## 19_19 -672.86666667 -397.3666667 -457.0000000 ## 19_20 -558.30000000 -384.2666667 -12.5666667 ## 19_21 -161.83333333 -479.3000000 -117.8666667 ## 19_22 NA -217.4333333 -37.0454545 ## 19_23 NA -77.5000000 NA ## 20_0 NA NA NA ## 20_1 NA NA NA ## 20_2 NA NA NA ## 20_3 NA NA NA ## 20_4 NA NA NA ## 20_5 3.50000000 -3.8333333 -5.2800000 ## 20_6 -120.76666667 2.5333333 -74.6000000 ## 20_7 -39.16666667 13.9000000 -32.1333333 ## 20_8 -109.93333333 -140.9000000 -105.4333333 ## 20_9 -70.30000000 -108.5000000 -135.8666667 ## 20_10 -236.53333333 -73.4666667 -165.0333333 ## 20_11 -132.73333333 -128.3666667 -104.8333333 ## 20_12 -81.73333333 -86.8666667 -198.7666667 ## 20_13 -244.03333333 -107.9000000 -168.7666667 ## 20_14 -356.33333333 -331.5000000 -160.0666667 ## 20_15 -489.70000000 -401.9333333 -477.4666667 ## 20_16 -529.10000000 -509.5666667 -418.9000000 ## 20_17 -672.96666667 -572.3666667 -794.6333333 ## 20_18 -709.00000000 -531.6333333 -764.9000000 ## 20_19 -581.86666667 -663.3666667 -653.0000000 ## 20_20 -529.30000000 -389.2666667 -214.5666667 ## 20_21 -372.83333333 -185.3000000 -309.8666667 ## 20_22 NA -206.4333333 -28.0454545 ## 20_23 NA -43.5000000 NA ## 21_0 NA NA NA ## 21_1 NA NA NA ## 21_2 NA NA NA ## 21_3 NA NA NA ## 21_4 NA NA NA ## 21_5 -9.50000000 -4.8333333 -5.2800000 ## 21_6 24.23333333 -66.4666667 -91.6000000 ## 21_7 -55.16666667 4.9000000 -25.1333333 ## 21_8 -71.93333333 -168.9000000 89.5666667 ## 21_9 -110.30000000 44.5000000 -100.8666667 ## 21_10 -100.53333333 -89.4666667 -99.0333333 ## 21_11 102.26666667 -99.3666667 -152.8333333 ## 21_12 -118.73333333 -36.8666667 143.2333333 ## 21_13 160.96666667 -120.9000000 -12.7666667 ## 21_14 -370.33333333 -378.5000000 -324.0666667 ## 21_15 -498.70000000 -283.9333333 -237.4666667 ## 21_16 -408.10000000 -50.5666667 -240.9000000 ## 21_17 -338.96666667 -294.3666667 -271.6333333 ## 21_18 -299.00000000 -496.6333333 -455.9000000 ## 21_19 -124.86666667 -446.3666667 -553.0000000 ## 21_20 -170.30000000 -444.2666667 -273.5666667 ## 21_21 43.16666667 -216.3000000 -229.8666667 ## 21_22 NA -137.4333333 NA ## 21_23 NA -55.5000000 NA ## 22_0 NA NA NA ## 22_1 NA NA NA ## 22_2 NA NA NA ## 22_3 NA NA NA ## 22_4 NA NA NA ## 22_5 -6.50000000 17.1666667 -0.2800000 ## 22_6 144.23333333 -34.4666667 -70.6000000 ## 22_7 192.83333333 -66.1000000 28.8666667 ## 22_8 178.06666667 15.1000000 -113.4333333 ## 22_9 -67.30000000 -29.5000000 -159.8666667 ## 22_10 -39.53333333 -7.4666667 -150.0333333 ## 22_11 -105.73333333 170.6333333 -99.8333333 ## 22_12 -115.73333333 31.1333333 -212.7666667 ## 22_13 -270.03333333 -27.9000000 -172.7666667 ## 22_14 -374.33333333 -425.5000000 -352.0666667 ## 22_15 -615.70000000 -403.9333333 -469.4666667 ## 22_16 -133.10000000 -496.5666667 -259.9000000 ## 22_17 -640.96666667 -673.3666667 -445.6333333 ## 22_18 -655.00000000 -465.6333333 -787.9000000 ## 22_19 -607.86666667 -748.3666667 -704.0000000 ## 22_20 -780.30000000 43.7333333 -409.5666667 ## 22_21 -317.83333333 -331.3000000 -322.8666667 ## 22_22 NA -171.4333333 NA ## 22_23 NA 39.5000000 NA ## 23_0 NA NA NA ## 23_1 NA NA NA ## 23_2 NA NA NA ## 23_3 NA NA NA ## 23_4 NA NA NA ## 23_5 -9.50000000 -4.8333333 NA ## 23_6 -239.76666667 -32.4666667 -36.6000000 ## 23_7 -185.16666667 -44.1000000 -74.1333333 ## 23_8 -69.93333333 -126.9000000 -98.4333333 ## 23_9 -22.30000000 161.5000000 -106.8666667 ## 23_10 -16.53333333 168.5333333 -156.0333333 ## 23_11 -57.73333333 -112.3666667 -141.8333333 ## 23_12 -229.73333333 366.1333333 -211.7666667 ## 23_13 -330.03333333 -149.9000000 -143.7666667 ## 23_14 -188.33333333 -143.5000000 -182.0666667 ## 23_15 -678.70000000 259.0666667 -247.4666667 ## 23_16 -592.10000000 -163.5666667 -167.9000000 ## 23_17 -385.96666667 282.6333333 -434.6333333 ## 23_18 -682.00000000 346.3666667 -646.9000000 ## 23_19 -401.86666667 -0.3666667 -440.0000000 ## 23_20 -438.30000000 -247.2666667 -254.5666667 ## 23_21 189.16666667 72.7000000 -277.8666667 ## 23_22 NA -50.4333333 -37.0454545 ## 23_23 NA -4.5000000 NA ## 24_0 NA NA NA ## 24_1 NA NA NA ## 24_2 NA NA NA ## 24_3 NA NA NA ## 24_4 NA NA NA ## 24_5 8.50000000 1.1666667 -3.2800000 ## 24_6 13.23333333 11.5333333 -91.6000000 ## 24_7 22.83333333 29.9000000 60.8666667 ## 24_8 85.06666667 -42.9000000 -136.4333333 ## 24_9 60.70000000 -56.5000000 -0.8666667 ## 24_10 193.46666667 389.5333333 363.9666667 ## 24_11 -94.73333333 -8.3666667 -118.8333333 ## 24_12 304.26666667 -29.8666667 -45.7666667 ## 24_13 67.96666667 90.1000000 331.2333333 ## 24_14 425.66666667 1352.5000000 574.9333333 ## 24_15 1721.30000000 1141.0666667 899.5333333 ## 24_16 923.90000000 714.4333333 1177.1000000 ## 24_17 998.03333333 1345.6333333 1728.3666667 ## 24_18 506.00000000 1060.3666667 1130.1000000 ## 24_19 385.13333333 278.6333333 1074.0000000 ## 24_20 589.70000000 419.7333333 96.4333333 ## 24_21 593.16666667 1202.7000000 291.1333333 ## 24_22 NA 76.5666667 -37.0454545 ## 24_23 NA 45.5000000 NA ## 25_0 NA NA NA ## 25_1 NA NA NA ## 25_2 NA NA NA ## 25_3 NA NA NA ## 25_4 NA NA NA ## 25_5 -3.50000000 -4.8333333 -5.2800000 ## 25_6 281.23333333 66.5333333 -105.6000000 ## 25_7 313.83333333 48.9000000 -59.1333333 ## 25_8 272.06666667 554.1000000 -111.4333333 ## 25_9 522.70000000 288.5000000 391.1333333 ## 25_10 121.46666667 437.5333333 158.9666667 ## 25_11 -0.73333333 127.6333333 296.1666667 ## 25_12 425.26666667 -13.8666667 -153.7666667 ## 25_13 485.96666667 264.1000000 -53.7666667 ## 25_14 82.66666667 650.5000000 -203.0666667 ## 25_15 611.30000000 511.0666667 -99.4666667 ## 25_16 1176.90000000 431.4333333 -155.9000000 ## 25_17 2074.03333333 455.6333333 1068.3666667 ## 25_18 709.00000000 1344.3666667 1282.1000000 ## 25_19 475.13333333 615.6333333 1245.0000000 ## 25_20 895.70000000 1008.7333333 459.4333333 ## 25_21 151.16666667 915.7000000 284.1333333 ## 25_22 NA 280.5666667 -37.0454545 ## 25_23 NA 267.5000000 NA ## 26_0 NA NA NA ## 26_1 NA NA NA ## 26_2 NA NA NA ## 26_3 NA NA NA ## 26_4 NA NA NA ## 26_5 -9.50000000 -1.8333333 53.7200000 ## 26_6 351.23333333 99.5333333 549.4000000 ## 26_7 800.83333333 -26.1000000 21.8666667 ## 26_8 100.06666667 181.1000000 289.5666667 ## 26_9 81.70000000 -35.5000000 245.1333333 ## 26_10 358.46666667 371.5333333 98.9666667 ## 26_11 276.26666667 24.6333333 319.1666667 ## 26_12 130.26666667 92.1333333 -46.7666667 ## 26_13 500.96666667 137.1000000 25.2333333 ## 26_14 474.66666667 231.5000000 -160.0666667 ## 26_15 300.30000000 -14.9333333 -145.4666667 ## 26_16 123.90000000 -17.5666667 9.1000000 ## 26_17 178.03333333 -12.3666667 -227.6333333 ## 26_18 375.00000000 132.3666667 -231.9000000 ## 26_19 499.13333333 35.6333333 163.0000000 ## 26_20 1091.70000000 242.7333333 43.4333333 ## 26_21 495.16666667 297.7000000 211.1333333 ## 26_22 NA 290.5666667 -10.0454545 ## 26_23 NA 149.5000000 NA ## 27_0 NA NA NA ## 27_1 NA NA NA ## 27_2 NA NA NA ## 27_3 NA NA NA ## 27_4 NA NA NA ## 27_5 46.50000000 23.1666667 -3.2800000 ## 27_6 13.23333333 36.5333333 -109.6000000 ## 27_7 51.83333333 -0.1000000 -31.1333333 ## 27_8 -66.93333333 66.1000000 -65.4333333 ## 27_9 81.70000000 102.5000000 26.1333333 ## 27_10 50.46666667 103.5333333 71.9666667 ## 27_11 -8.73333333 43.6333333 -108.8333333 ## 27_12 156.26666667 162.1333333 -46.7666667 ## 27_13 139.96666667 57.1000000 -209.7666667 ## 27_14 617.66666667 557.5000000 16.9333333 ## 27_15 651.30000000 360.0666667 -2.4666667 ## 27_16 1068.90000000 -107.5666667 -18.9000000 ## 27_17 896.03333333 972.6333333 1114.3666667 ## 27_18 1183.00000000 1226.3666667 2539.1000000 ## 27_19 429.13333333 1129.6333333 31.0000000 ## 27_20 1319.70000000 591.7333333 -292.5666667 ## 27_21 -71.83333333 1198.7000000 501.1333333 ## 27_22 NA 479.5666667 -37.0454545 ## 27_23 NA 280.5000000 NA ## 28_0 NA NA NA ## 28_1 NA NA NA ## 28_2 NA NA NA ## 28_3 NA NA NA ## 28_4 NA NA NA ## 28_5 -8.50000000 -4.8333333 -0.2800000 ## 28_6 119.23333333 209.5333333 -67.6000000 ## 28_7 0.83333333 223.9000000 137.8666667 ## 28_8 117.06666667 329.1000000 82.5666667 ## 28_9 29.70000000 224.5000000 -23.8666667 ## 28_10 191.46666667 357.5333333 150.9666667 ## 28_11 54.26666667 -78.3666667 71.1666667 ## 28_12 98.26666667 40.1333333 107.2333333 ## 28_13 780.96666667 82.1000000 147.2333333 ## 28_14 294.66666667 286.5000000 521.9333333 ## 28_15 -237.70000000 430.0666667 701.5333333 ## 28_16 512.90000000 468.4333333 370.1000000 ## 28_17 873.03333333 825.6333333 929.3666667 ## 28_18 2264.00000000 956.3666667 923.1000000 ## 28_19 913.13333333 911.6333333 1506.0000000 ## 28_20 1903.70000000 1052.7333333 14.4333333 ## 28_21 579.16666667 1474.7000000 554.1333333 ## 28_22 NA -0.4333333 NA ## 28_23 NA 198.5000000 NA ## 29_0 NA NA NA ## 29_1 NA NA NA ## 29_2 NA NA NA ## 29_3 NA NA NA ## 29_4 NA NA NA ## 29_5 -7.50000000 26.1666667 -2.2800000 ## 29_6 85.23333333 34.5333333 -59.6000000 ## 29_7 179.83333333 86.9000000 121.8666667 ## 29_8 183.06666667 5.1000000 15.5666667 ## 29_9 98.70000000 7.5000000 260.1333333 ## 29_10 167.46666667 128.5333333 -57.0333333 ## 29_11 -16.73333333 169.6333333 -41.8333333 ## 29_12 318.26666667 39.1333333 -238.7666667 ## 29_13 -145.03333333 -127.9000000 137.2333333 ## 29_14 -6.33333333 95.5000000 -62.0666667 ## 29_15 -105.70000000 134.0666667 -126.4666667 ## 29_16 -274.10000000 284.4333333 -20.9000000 ## 29_17 -374.96666667 -536.3666667 -601.6333333 ## 29_18 -777.00000000 138.3666667 -805.9000000 ## 29_19 -318.86666667 -80.3666667 -749.0000000 ## 29_20 -702.30000000 -168.2666667 -409.5666667 ## 29_21 -275.83333333 -32.3000000 -308.8666667 ## 29_22 NA -1.4333333 NA ## 29_23 NA 198.5000000 NA ## 30_0 NA NA NA ## 30_1 NA NA NA ## 30_2 NA NA NA ## 30_3 NA NA NA ## 30_4 NA NA NA ## 30_5 15.50000000 0.1666667 NA ## 30_6 104.23333333 -0.4666667 -85.6000000 ## 30_7 -106.16666667 2.9000000 -77.1333333 ## 30_8 -97.93333333 -9.9000000 -149.4333333 ## 30_9 -5.30000000 -59.5000000 -110.8666667 ## 30_10 -162.53333333 -61.4666667 -117.0333333 ## 30_11 -48.73333333 169.6333333 349.1666667 ## 30_12 47.26666667 -99.8666667 -49.7666667 ## 30_13 166.96666667 453.1000000 -131.7666667 ## 30_14 719.66666667 -288.5000000 168.9333333 ## 30_15 1805.30000000 375.0666667 1013.5333333 ## 30_16 1615.90000000 738.4333333 1044.1000000 ## 30_17 1572.03333333 914.6333333 670.3666667 ## 30_18 1220.00000000 544.3666667 393.1000000 ## 30_19 822.13333333 127.6333333 198.0000000 ## 30_20 832.70000000 77.7333333 411.4333333 ## 30_21 430.16666667 748.7000000 23.1333333 ## 30_22 NA 452.5666667 55.9545455 ## 30_23 NA 236.5000000 NA ## 31_0 NA NA NA ## 31_1 NA NA NA ## 31_2 NA NA NA ## 31_3 NA NA NA ## 31_4 NA NA NA ## 31_5 NA NA NA ## 31_6 NA NA NA ## 31_7 NA NA NA ## 31_8 NA NA NA ## 31_9 NA NA NA ## 31_10 NA NA NA ## 31_11 NA NA NA ## 31_12 NA NA NA ## 31_13 NA NA NA ## 31_14 NA NA NA ## 31_15 NA NA NA ## 31_16 NA NA NA ## 31_17 NA NA NA ## 31_18 NA NA NA ## 31_19 NA NA NA ## 31_20 NA NA NA ## 31_21 NA NA NA ## 31_22 NA NA NA ## 31_23 NA NA NA ``` --- ## Lagged cross correlations 1 hour lag ``` r cor(delay_matrix[-nrow(delay_matrix),], delay_matrix[-1,], use = 'pairwise') ``` ``` ## EWR JFK LGA ## EWR 0.77 0.72 0.69 ## JFK 0.66 0.70 0.54 ## LGA 0.64 0.60 0.70 ``` `$$\small \begin{bmatrix} \text{cor}(\text{EWR}_{t-1}, \text{EWR}_{t}) & \text{cor}(\text{EWR}_{t-1}, \text{JFK}_{t}) & \text{cor}(\text{EWR}_{t-1}, \text{LGA}_{t}) \\ \text{cor}(\text{JFK}_{t-1}, \text{EWR}_{t}) & \text{cor}(\text{JFK}_{t-1}, \text{JFK}_{t}) & \text{cor}(\text{JFK}_{t-1}, \text{LGA}_{t}) \\ \text{cor}(\text{LGA}_{t-1}, \text{LGA}_{t}) & \text{cor}(\text{LGA}_{t-1}, \text{JFK}_{t}) & \text{cor}(\text{LGA}_{t-1}, \text{LGA}_{t}) \end{bmatrix}$$` --- ## 2 hour lag ``` r cor(delay_matrix[1:(nrow(delay_matrix)-2),], delay_matrix[-(1:2),], use = 'pairwise') ``` ``` ## EWR JFK LGA ## EWR 0.72 0.64 0.60 ## JFK 0.61 0.62 0.48 ## LGA 0.56 0.56 0.57 ``` --- ## The whole ballgame:auto-correlation function ``` r acf_arr = acf(delay_matrix, na.action = na.pass, lag.max = 12, plot = FALSE) plot(acf_arr) ``` <img src="l11-linear-algebra-indexing_files/figure-html/unnamed-chunk-18-1.png" width="60%" style="display: block; margin: auto;" /> Some caveats as to why the output from acf differs slightly from the lagged correlations. [1](https://stats.stackexchange.com/questions/81754/understanding-this-acf-output) [2](https://stackoverflow.com/a/16403622/3777396). --- ## Motivation: programming * dplyr is great for one-off analyses! * ...but can be a hassle to program abstracted routines. * Manipulation of vectors and matrices in R is more flexible and transparent. * We'll get more motivation for this when we discuss functions (next week) --- class: middle .hand[Care and feeding of vectors] --- ## Vectors are everywhere Your garden variety R object is a vector. Square brackets are used for isolating elements of a vector. This is often called __indexing__. Indexing begins at 1 in R, unlike many other languages that index from 0. ``` r x = 3 * 4 x ``` ``` ## [1] 12 ``` ``` r length(x) ``` ``` ## [1] 1 ``` ``` r x[2] = 100 x ``` ``` ## [1] 12 100 ``` --- ## R is very (probably too) forgiving with indexing. ``` r x[5] = 3 x ``` ``` ## [1] 12 100 NA NA 3 ``` ``` r x[11] ``` ``` ## [1] NA ``` ``` r x[0] ``` ``` ## numeric(0) ``` --- ## Most functions are vectorized When reading docs,look for arguments that can be vectors. For example, the mean and standard deviation of random normal variates can be provided as vectors. ``` r set.seed(2021) rnorm(5, mean = 10^(1:5)) ``` ``` ## [1] 9.88 100.55 1000.35 10000.36 100000.90 ``` ``` r rnorm(5, sd = 10^(1:5)) ``` ``` ## [1] -19.2 26.2 915.6 137.7 172996.3 ``` `1:5` is shorthand for `c(1,2,3,4,5)`, and so on. To generate more complicated sequences, see `seq(from, to, by, length.out)`. --- ## Vector arithmetic Arithmetic operator apply to vectors in a "componentwise" fashion ``` r x = c(7, 8, 10, 20) y = c(-7, -8, -10, -20) x + y ``` ``` ## [1] 0 0 0 0 ``` ``` r x * y ``` ``` ## [1] -49 -64 -100 -400 ``` --- Can do componentwise comparisons with vectors: ``` r x > 9 ``` ``` ## [1] FALSE FALSE TRUE TRUE ``` Logical operators also work elementwise: ``` r (x > 9) & (x < 20) ``` ``` ## [1] FALSE FALSE TRUE FALSE ``` --- To compare whole vectors, best to use `identical()` or `all.equal()`: .pull-left[ `identical()` and `==` ``` r x == -y ``` ``` ## [1] TRUE TRUE TRUE TRUE ``` ``` r identical(x, -y) ``` ``` ## [1] TRUE ``` ``` r u = c(0.5-0.3,0.3-0.1) v = c(0.3-0.1,0.5-0.3) identical(u,v) ``` ``` ## [1] FALSE ``` ``` r identical(u,v[2:1]) ``` ``` ## [1] TRUE ``` ] .pull-right[ `all.equal` and `near` allow for machine representation error in floating point values. ``` r all.equal(u, v) ``` ``` ## [1] TRUE ``` ``` r all.equal(u,v, tolerance = 0) ``` ``` ## [1] "Mean relative difference: 1.387779e-16" ``` ``` r near(u,v) ``` ``` ## [1] TRUE TRUE ``` ] --- ## Vectorization: awesome, yet dangerous Vectorization can be awesome but dangerous if you exploit it by mistake and get no warning. While we're on the topic of awesome, yet dangerous: .alert[R also recycles] vectors, if they are not the necessary length. You will get a warning when the lengths is not an integer multiples of each another, but recycling is silent if it seems like you know what you're doing. --- ## Recycled with a warning ``` r (y = 1:3) ``` ``` ## [1] 1 2 3 ``` ``` r (z = 3:7) ``` ``` ## [1] 3 4 5 6 7 ``` ``` r y + z ``` ``` ## Warning in y + z: longer object length is not a multiple of ## shorter object length ``` ``` ## [1] 4 6 8 7 9 ``` Hint: set `options(warn = 2)` to convert warnings to errors to catch this problem definitively. --- ## Recycled without warning ``` r (y = 1:10) ``` ``` ## [1] 1 2 3 4 5 6 7 8 9 10 ``` ``` r (z = 3:7) ``` ``` ## [1] 3 4 5 6 7 ``` ``` r y + z ``` ``` ## [1] 4 6 8 10 12 9 11 13 15 17 ``` `1` is a vector, so this is also a form of recycling! ``` r z + 1 ``` ``` ## [1] 4 5 6 7 8 ``` --- ## Making vectors The combine function `c()` is your go-to function for making vectors. (OMG, I was taught this was called concatenate.) ``` r str(c("hello", "world")) ``` ``` ## chr [1:2] "hello" "world" ``` ``` r str(c(1:3, 100, 150)) ``` ``` ## num [1:5] 1 2 3 100 150 ``` --- Let's create some simple vectors for more demos below. ``` r n = 8 set.seed(1) (w = round(rnorm(n), 2)) # numeric floating point ``` ``` ## [1] -0.63 0.18 -0.84 1.60 0.33 -0.82 0.49 0.74 ``` ``` r (x = 1:n) # numeric integer ``` ``` ## [1] 1 2 3 4 5 6 7 8 ``` ``` r (y = LETTERS[1:n]) # character ``` ``` ## [1] "A" "B" "C" "D" "E" "F" "G" "H" ``` ``` r (z = runif(n) > 0.3) # logical ``` ``` ## [1] TRUE TRUE TRUE TRUE TRUE FALSE TRUE FALSE ``` --- ## Indexing a vector Square brackets are used to index a vector. There is great flexibility in what one can put inside the square brackets. Common ways to index a vector: * __logical vector__: keep elements associated with TRUE's, ditch the FALSE's * __vector of positive integers__: specifying the keepers * __vector of negative integers__: specifying the losers * __character vector__: naming the keepers --- ## Names ``` r w ``` ``` ## [1] -0.63 0.18 -0.84 1.60 0.33 -0.82 0.49 0.74 ``` ``` r names(w) = letters[seq_along(w)] w ``` ``` ## a b c d e f g h ## -0.63 0.18 -0.84 1.60 0.33 -0.82 0.49 0.74 ``` ``` r w[c('a', 'b', 'd')] ``` ``` ## a b d ## -0.63 0.18 1.60 ``` --- ## Boolean vectors ``` r w < 0 ``` ``` ## a b c d e f g h ## TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE ``` ``` r which(w < 0) ``` ``` ## a c f ## 1 3 6 ``` ``` r w[w < 0] ``` ``` ## a c f ## -0.63 -0.84 -0.82 ``` `which()` gives the elements of a Boolean vector that are `TRUE`, excludes .alert[NA]. --- ## Integer vectors ``` r seq(from = 1, to = length(w), by = 2) ``` ``` ## [1] 1 3 5 7 ``` ``` r w[seq(from = 1, to = length(w), by = 2)] ``` ``` ## a c e g ## -0.63 -0.84 0.33 0.49 ``` ``` r w[-c(2, 5)] ``` ``` ## a c d f g h ## -0.63 -0.84 1.60 -0.82 0.49 0.74 ``` ``` r w[c('c', 'a', 'f')] ``` ``` ## c a f ## -0.84 -0.63 -0.82 ``` --- class: middle .hand[Lists...again] --- ## Lists...again We have seen that lists before: the über-vector in R. It's got length, like a vector, but with no requirement that the elements be of the same type In data analysis, you won't make lists very often, at least not consciously. But * data.frames are lists! They are a special case where each element is an vector, all having the same length. * Many non-tidyverse functions return lists. You will want to extract goodies from them, such as the p-value for a hypothesis test or the estimated error variance in a regression model --- ## Lists...again Using `list()` instead of `c()` to combine things and you'll notice that the different flavors of the constituent parts are retained this time. ``` r ## earlier: a = c("cabbage", pi, TRUE, 4.3) (a = list("cabbage", pi, TRUE, c(4.3,3,2.1,10))) ``` ``` ## [[1]] ## [1] "cabbage" ## ## [[2]] ## [1] 3.141593 ## ## [[3]] ## [1] TRUE ## ## [[4]] ## [1] 4.3 3.0 2.1 10.0 ``` --- ## Names in lists List components can also have names. You can create or change names after a list already exists or in the initial assignment. .pull-left[ ``` r names(a) ``` ``` ## NULL ``` ``` r names(a) = c("veg", "dessert", "my_aim", "number") a ``` ``` ## $veg ## [1] "cabbage" ## ## $dessert ## [1] 3.141593 ## ## $my_aim ## [1] TRUE ## ## $number ## [1] 4.3 3.0 2.1 10.0 ``` ] .pull-right[ ``` r a = list(veg = "cabbage", dessert = pi, my_aim = TRUE, numbers = c(4.3,10)) a ``` ``` ## $veg ## [1] "cabbage" ## ## $dessert ## [1] 3.141593 ## ## $my_aim ## [1] TRUE ## ## $numbers ## [1] 4.3 10.0 ``` ] --- ## Indexing lists Indexing a list is similar to indexing a vector but it is necessarily more complex. If you request more than one element, you should and will get a list back. But if you request a single element: * Do you want list of length 1 containing only that element? Use single square brackets, `[` and `]`.This is rarely desired... * Or do you want the element itself? Use a dollar sign `$`, or double square brackets, `[[` and `]]`. The ["pepper shaker photos" in R for Data Science](https://r4ds.had.co.nz/vectors.html#lists-of-condiments) are a splendid visual explanation of the different ways to get stuff out of a list. --- ## More list indexing ``` r (a = list(veg = c("cabbage", "eggplant"), t_num = c(pi, exp(1), sqrt(2)), my_aim = TRUE, joe_num = 2:6)) ``` ``` ## $veg ## [1] "cabbage" "eggplant" ## ## $t_num ## [1] 3.141593 2.718282 1.414214 ## ## $my_aim ## [1] TRUE ## ## $joe_num ## [1] 2 3 4 5 6 ``` A slightly more complicated list for demo purposes. --- ## Single, unlisted elements ``` r a[[2]] # index with a positive integer ``` ``` ## [1] 3.141593 2.718282 1.414214 ``` ``` r a$my_aim # use dollar sign and element name ``` ``` ## [1] TRUE ``` ``` r a[["t_num"]] # index with length 1 character vector ``` ``` ## [1] 3.141593 2.718282 1.414214 ``` --- ## Single, unlisted elements ``` r i_want_this = "joe_num" # indexing with length 1 character object a[[i_want_this]] # we get joe_num itself, a length 5 integer vector ``` ``` ## [1] 2 3 4 5 6 ``` * When the indexing object is an R object, prefer the double brackets. --- ## Double bracket only for single elements ``` r a[[c("joe_num", "veg")]] ``` ``` ## Error in a[[c("joe_num", "veg")]]: subscript out of bounds ``` We get an error if we try to extract more than element with double brackets --- ## More than one element ``` r names(a) ``` ``` ## [1] "veg" "t_num" "my_aim" "joe_num" ``` ``` r str(a[c("t_num", "veg")]) # returns list of length 2 ``` ``` ## List of 2 ## $ t_num: num [1:3] 3.14 2.72 1.41 ## $ veg : chr [1:2] "cabbage" "eggplant" ``` ``` r str(a["veg"])# returns list of length 1 ``` ``` ## List of 1 ## $ veg: chr [1:2] "cabbage" "eggplant" ``` ``` r length(a["veg"][[1]]) # contrast with length of the veg vector itself ``` ``` ## [1] 2 ``` The return value will always be a list, even if you only request 1 element. --- ## A useful list ``` r lmcars = lm(speed~dist, data=cars) lmcars[[1]] ``` ``` ## (Intercept) dist ## 8.2839056 0.1655676 ``` ``` r summary(lmcars)$sigma ``` ``` ## [1] 3.155753 ``` ``` r names(summary(lmcars)) ``` ``` ## [1] "call" "terms" "residuals" ## [4] "coefficients" "aliased" "sigma" ## [7] "df" "r.squared" "adj.r.squared" ## [10] "fstatistic" "cov.unscaled" ``` --- ## Creating a data.frame explicitly In data analysis, we often import data into data.frame via `read_csv()`. But one can also construct a data.frame directly using `tibble()`. ``` r n = 8 (j_dat = tibble(w = rnorm(n), x = 1:n, y = LETTERS[1:n], z = runif(n) > 0.3)) ``` ``` ## # A tibble: 8 × 4 ## w x y z ## <dbl> <int> <chr> <lgl> ## 1 -0.621 1 A TRUE ## 2 -2.21 2 B TRUE ## 3 1.12 3 C TRUE ## 4 -0.0449 4 D TRUE ## 5 -0.0162 5 E TRUE ## 6 0.944 6 F TRUE ## 7 0.821 7 G FALSE ## 8 0.594 8 H TRUE ``` --- ## data.frames really are lists! ``` r is.list(j_dat) # data.frames are lists ``` ``` ## [1] TRUE ``` ``` r j_dat[[4]] # this works but I prefer ... ``` ``` ## [1] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE ``` ``` r j_dat$z # using dollar sign and name, when possible ``` ``` ## [1] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE ``` ``` r namez=c("z") j_dat[[namez]] # using a character vector of names ``` ``` ## [1] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE ``` ``` r #namez=c("z","w") #j_dat[[namez]] # does not work: Error ``` --- ## data.frames really are lists! ``` r str(j_dat[c("x", "z")]) # get multiple variables ``` ``` ## tibble [8 × 2] (S3: tbl_df/tbl/data.frame) ## $ x: int [1:8] 1 2 3 4 5 6 7 8 ## $ z: logi [1:8] TRUE TRUE TRUE TRUE TRUE TRUE ... ``` ``` r head(select(j_dat, x, z), 4) # tidyverse version is better in interactive work ``` ``` ## # A tibble: 4 × 2 ## x z ## <int> <lgl> ## 1 1 TRUE ## 2 2 TRUE ## 3 3 TRUE ## 4 4 TRUE ``` ``` r identical(select(j_dat, x, z), j_dat[c("x", "z")]) ``` ``` ## [1] TRUE ``` Coerce a list directly to a data.frame directly `as_tibble()`. --- class: middle .hand[Matrices are vectors with `dim`.] --- ## Matrices vs data frames A matrix is a generalization of an atomic vector and the requirement that all the elements be of the same flavor still holds. * Data frames: default receptacle for rectangular data * But when we need to do linear algebra, we may want to use a matrix instead. * Higher-order arrays are also available in R. A matrix is an important special case having dimension 2. --- class: code70 ## Matrices Let's make a simple matrix and give it decent row and column names, which we know is a good practice. You'll see familiar or self-explanatory functions below for getting to know a matrix. ``` r ## don't worry if the construction of this matrix confuses you; ## just focus on the product j_mat = outer(as.character(1:4), as.character(1:4), function(x, y) paste0('x', x, y) ) j_mat ``` ``` ## [,1] [,2] [,3] [,4] ## [1,] "x11" "x12" "x13" "x14" ## [2,] "x21" "x22" "x23" "x24" ## [3,] "x31" "x32" "x33" "x34" ## [4,] "x41" "x42" "x43" "x44" ``` ``` r str(j_mat) ``` ``` ## chr [1:4, 1:4] "x11" "x21" "x31" "x41" "x12" "x22" "x32" ... ``` --- ## Useful matrix functions ``` r dim(j_mat) ``` ``` ## [1] 4 4 ``` ``` r length(j_mat) ``` ``` ## [1] 16 ``` ``` r nrow(j_mat) ``` ``` ## [1] 4 ``` ``` r ncol(j_mat) ``` ``` ## [1] 4 ``` --- ## Dimensions can have names ``` r rownames(j_mat) ``` ``` ## NULL ``` ``` r rownames(j_mat) = str_c("row", seq_len(nrow(j_mat))) colnames(j_mat) = str_c("col", seq_len(ncol(j_mat))) dimnames(j_mat) # also useful for assignment ``` ``` ## [[1]] ## [1] "row1" "row2" "row3" "row4" ## ## [[2]] ## [1] "col1" "col2" "col3" "col4" ``` ``` r j_mat ``` ``` ## col1 col2 col3 col4 ## row1 "x11" "x12" "x13" "x14" ## row2 "x21" "x22" "x23" "x24" ## row3 "x31" "x32" "x33" "x34" ## row4 "x41" "x42" "x43" "x44" ``` --- ## Indexing a matrix ``` r j_mat[2, 3] ``` ``` ## [1] "x23" ``` ``` r j_mat[2, ] # getting row 2 ``` ``` ## col1 col2 col3 col4 ## "x21" "x22" "x23" "x24" ``` ``` r is.vector(j_mat[2, ]) # we get row 2 as an atomic vector ``` ``` ## [1] TRUE ``` ``` r j_mat[ , 3, drop = FALSE] # getting column 3 ``` ``` ## col3 ## row1 "x13" ## row2 "x23" ## row3 "x33" ## row4 "x43" ``` ``` r dim(j_mat[ , 3, drop = FALSE]) # we get column 3 as a 4 x 1 matrix ``` ``` ## [1] 4 1 ``` --- ## Use all of your favorite vector methods, too. ``` r j_mat[c("row1", "row4"), c("col2", "col3")] ``` ``` ## col2 col3 ## row1 "x12" "x13" ## row4 "x42" "x43" ``` ``` r j_mat[-c(2, 3), c(TRUE, TRUE, FALSE, FALSE)] # wacky but possible ``` ``` ## col1 col2 ## row1 "x11" "x12" ## row4 "x41" "x42" ``` --- ## Indexing a matrix In summary: * Use `[`, `]` and a logical, integer numeric (positive or negative), or character vector. * The comma `,` to distinguishes rows and columns. * The `\(i,j\)`-th element is the element at the intersection of row `\(i\)` and column `\(j\)` and is obtained with `j_mat[i, j]`. * Request an entire row/column by leaving the associated index empty. * `drop = FALSE` preserves singleton dimensions. Almost always want this when programming with variable indices. --- ## R uses column major order Under the hood, of course, matrices are just vectors with some extra facilities for indexing. R uses column-major order: the columns are stacked up one after the other. (Contrast to C and Python which use row-major order). <img src="l11/img/major-order.png" width="60%" style="display: block; margin: auto;" /> --- ## Matrices are vectors ! Matrices can be indexed *exactly* like a vector, i.e. with no comma `\(i,j\)` business, like so: ``` r j_mat[7] ``` ``` ## [1] "x32" ``` ``` r j_mat ``` ``` ## col1 col2 col3 col4 ## row1 "x11" "x12" "x13" "x14" ## row2 "x21" "x22" "x23" "x24" ## row3 "x31" "x32" "x33" "x34" ## row4 "x41" "x42" "x43" "x44" ``` How to understand this: start counting in the upper left corner, move down the column, continue from the top of column 2 and you'll land on the element "x32" when you get to 7. --- ## Matrices are vectors! Note also that one can put an indexed matrix on the receiving end of an assignment operation and, as long as your replacement values have valid shape or extent, you can change the matrix. ``` r j_mat["row1", 2:3] = c("HEY!", "THIS IS NUTS!") j_mat ``` ``` ## col1 col2 col3 col4 ## row1 "x11" "HEY!" "THIS IS NUTS!" "x14" ## row2 "x21" "x22" "x23" "x24" ## row3 "x31" "x32" "x33" "x34" ## row4 "x41" "x42" "x43" "x44" ``` --- class: code90 ## Recycling also works! ``` r norm_mat = matrix(rnorm(6), nrow = 3) cbind(norm_mat, rep(1,3), rowMeans(norm_mat)) ``` ``` ## [,1] [,2] [,3] [,4] ## [1,] 0.61982575 -1.4707524 1 -0.4254633 ## [2,] -0.05612874 -0.4781501 1 -0.2671394 ## [3,] -0.15579551 0.4179416 1 0.1310730 ``` Recycle over each entry in first column, each entry in second column ``` r (center_mat = norm_mat - rowMeans(norm_mat)) ``` ``` ## [,1] [,2] ## [1,] 1.0452891 -1.0452891 ## [2,] 0.2110107 -0.2110107 ## [3,] -0.2868685 0.2868685 ``` --- ## Creating arrays, e.g. matrices All matrix elements must be the same flavor. If that's not true, you risk an error or, worse, silent conversion to character. To make a matrix: * Fill with a vector * Glue vectors together as rows or columns * Or conversion from a data.frame --- ## Fill with a vector ``` r matrix(1:15, nrow = 5) ``` ``` ## [,1] [,2] [,3] ## [1,] 1 6 11 ## [2,] 2 7 12 ## [3,] 3 8 13 ## [4,] 4 9 14 ## [5,] 5 10 15 ``` ``` r matrix(1:15, nrow = 5, byrow = TRUE) ``` ``` ## [,1] [,2] [,3] ## [1,] 1 2 3 ## [2,] 4 5 6 ## [3,] 7 8 9 ## [4,] 10 11 12 ## [5,] 13 14 15 ``` * `reshape2::acast()`! --- ## Recycle a vector ``` r matrix(c("yo!", "foo?"), nrow = 3, ncol = 4) ``` ``` ## [,1] [,2] [,3] [,4] ## [1,] "yo!" "foo?" "yo!" "foo?" ## [2,] "foo?" "yo!" "foo?" "yo!" ## [3,] "yo!" "foo?" "yo!" "foo?" ``` --- ## Provide names ``` r matrix(1:15, nrow = 5, dimnames = list(paste0("row", 1:5), paste0("col", 1:3))) ``` ``` ## col1 col2 col3 ## row1 1 6 11 ## row2 2 7 12 ## row3 3 8 13 ## row4 4 9 14 ## row5 5 10 15 ``` --- ## Bind columns Here we create a matrix by binding vectors together. Watch the vector names propagate as row or column names. ``` r vec1 = 5:1 vec2 = 2^(1:5) cbind(vec1, vec2) ``` ``` ## vec1 vec2 ## [1,] 5 2 ## [2,] 4 4 ## [3,] 3 8 ## [4,] 2 16 ## [5,] 1 32 ``` --- ## bind rows ``` r rbind(vec1, vec2) ``` ``` ## [,1] [,2] [,3] [,4] [,5] ## vec1 5 4 3 2 1 ## vec2 2 4 8 16 32 ``` You may have also seen me use `bind_rows()` and `bind_cols()` -- these are analogous tidyverse functions that you will want to use when working with **data frames**--they don't work with matrices. They have nicer defaults for data frames than `cbind()` and `rbind()`. --- ## From a data frame. ``` r (vecDat = tibble(vec1 = 5:1, vec2 = 2^(1:5))) ``` ``` ## # A tibble: 5 × 2 ## vec1 vec2 ## <int> <dbl> ## 1 5 2 ## 2 4 4 ## 3 3 8 ## 4 2 16 ## 5 1 32 ``` ``` r vecMat = as.matrix(vecDat) str(vecMat) ``` ``` ## num [1:5, 1:2] 5 4 3 2 1 2 4 8 16 32 ## - attr(*, "dimnames")=List of 2 ## ..$ : NULL ## ..$ : chr [1:2] "vec1" "vec2" ``` --- ## From a data frame with silent coercion 🤦 ``` r multiDat = tibble(vec1 = 5:1, vec2 = paste0("hi", 1:5)) (multiMat = as.matrix(multiDat)) ``` ``` ## vec1 vec2 ## [1,] "5" "hi1" ## [2,] "4" "hi2" ## [3,] "3" "hi3" ## [4,] "2" "hi4" ## [5,] "1" "hi5" ``` ``` r # Hey! Where did that heading come from? emo::ji("person_facepalming") ``` ``` ## 🤦 ``` --- class: code70 ## Matrix multiplication Matrices have its own special multiplication operator, written `%*%`: ``` r (six_sevens = matrix(rep(7,6), ncol=3)) ``` ``` ## [,1] [,2] [,3] ## [1,] 7 7 7 ## [2,] 7 7 7 ``` ``` r (z_mat = matrix(c(40,1,60,3), nrow=2)) ``` ``` ## [,1] [,2] ## [1,] 40 60 ## [2,] 1 3 ``` ``` r z_mat %*% six_sevens # [2x2] * [2x3] ``` ``` ## [,1] [,2] [,3] ## [1,] 700 700 700 ## [2,] 28 28 28 ``` --- ## Rowwise/columnwise manipulations * `rowSums()` `rowMeans()` * `colSums()` `colMeans()` * many more in `matrixStats` * roll your own with `apply(<MATRIX>, <1|2>, <FUN>)` * Use `1` for rows, `2` for columns --- ## rowSums vs apply ``` r rowSums(z_mat) ``` ``` ## [1] 100 4 ``` ``` r apply(z_mat, 1, sum) ``` ``` ## [1] 100 4 ``` --- ## Matrix diagonal The `diag()` function can be used to extract the diagonal entries of a matrix: ``` r diag(z_mat) ``` ``` ## [1] 40 3 ``` It can also replace the diagonal: ``` r diag(z_mat) = c(35,4) z_mat ``` ``` ## [,1] [,2] ## [1,] 35 60 ## [2,] 1 4 ``` --- ## Creating a diagonal matrix Finally, `diag()` can be used to create a diagonal matrix: ``` r diag(c(3,4)) ``` ``` ## [,1] [,2] ## [1,] 3 0 ## [2,] 0 4 ``` ``` r diag(2) ``` ``` ## [,1] [,2] ## [1,] 1 0 ## [2,] 0 1 ``` --- ## Other matrix operators **Transpose**: ``` r t(z_mat) ``` ``` ## [,1] [,2] ## [1,] 35 1 ## [2,] 60 4 ``` **Determinant**: ``` r det(z_mat) ``` ``` ## [1] 80 ``` --- ## Other matrix operators **Inverse**: ``` r solve(z_mat) ``` ``` ## [,1] [,2] ## [1,] 0.0500 -0.7500 ## [2,] -0.0125 0.4375 ``` ``` r z_mat %*% solve(z_mat) ``` ``` ## [,1] [,2] ## [1,] 1 0 ## [2,] 0 1 ``` --- ## Putting it all together...implications for data.frames Hopefully the slog through vectors, matrices, and lists will be redeemed by greater prowess at data analysis. Consider: * a data.frame is a *list* * the list elements are the variables and they are *atomic vectors* * data.frames are rectangular, like their matrix friends, so your intuition -- and even some syntax -- can be borrowed from the matrix world .alert[A data.frame is a list that quacks like a matrix.] --- ## Reviewing list-style indexing of a data.frame ``` r j_dat ``` ``` ## # A tibble: 8 × 4 ## w x y z ## <dbl> <int> <chr> <lgl> ## 1 -0.621 1 A TRUE ## 2 -2.21 2 B TRUE ## 3 1.12 3 C TRUE ... ``` ``` r j_dat$z ``` ``` ## [1] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE ``` ``` r i_want_this = "z" (j_dat[[i_want_this]]) # atomic ``` ``` ## [1] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE ``` --- ## Reviewing vector-style indexing of a data.frame: ``` r j_dat["y"] ``` ``` ## # A tibble: 8 × 1 ## y ## <chr> ## 1 A ## 2 B ## 3 C ... ``` ``` r i_want_this = c("w", "z") j_dat[i_want_this] # index with a vector of variable names ``` ``` ## # A tibble: 8 × 2 ## w z ## <dbl> <lgl> ## 1 -0.621 TRUE ## 2 -2.21 TRUE ## 3 1.12 TRUE ... ``` --- ## Demonstrating matrix-style indexing of a data.frame: ``` r j_dat[ , "z"] #For tibbles, drop = FALSE by default. ``` ``` ## # A tibble: 8 × 1 ## z ## <lgl> ## 1 TRUE ## 2 TRUE ## 3 TRUE ... ``` ``` r j_dat[ , "z", drop = TRUE] ``` ``` ## [1] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE ``` --- ## Demonstrating matrix-style indexing of a data.frame: ``` r j_dat[c(2, 4, 7), c(1, 4)] # awful and arbitrary but syntax works ``` ``` ## # A tibble: 3 × 2 ## w z ## <dbl> <lgl> ## 1 -2.21 TRUE ## 2 -0.0449 TRUE ## 3 0.821 FALSE ``` ``` r j_dat[j_dat$z, ] ``` ``` ## # A tibble: 7 × 4 ## w x y z ## <dbl> <int> <chr> <lgl> ## 1 -0.621 1 A TRUE ## 2 -2.21 2 B TRUE ## 3 1.12 3 C TRUE ... ``` <!-- --- --> <!-- ## Post-test --> <!-- Ok, now let's make another attempt on [the quiz](https://docs.google.com/forms/d/e/1FAIpQLSexoCRQ0WqMH_yh38_cvpj28mM7Au8OJX8psuMJuTx9QNUgdw/viewform?usp=sf_link). --> --- ## Acknowledgments Based off of [materials from](https://www.stat.cmu.edu/~ryantibs/statcomp/lectures/intro.html) Ryan Tibshirani "Statistical Computing" at CMU and [Stat 545](https://stat545.com/r-objects.html) at UBC. More reading: [r4ds chapter 20](https://r4ds.had.co.nz/vectors.html). <!-- --- --> <!-- # Appendix --> <!-- --- --> <!-- class: code70 --> <!-- ```{r, ref.label='tabulate-delay', echo = TRUE, eval = FALSE} --> <!-- ``` -->