library(tidyverse)
library(nycflights13)

dat <- rio::import("https://github.com/marctrussler/IDS-Data/raw/refs/heads/main/PS2Question2.Rds")

dat |> 
  rename(percent.college = V5) |> 
  filter(percent.college>40) |> 
  mutate(county.name = gsub("PA_","", county.name)) |> 
  select(county.name, candidate, votes) |> 
  pivot_wider(names_from = candidate, 
              values_from = votes) |> 
  mutate(Biden = 100*round(biden/(biden + trump + other),4),
         Trump = 100*round(trump/(biden + trump + other),4),
         Other = 100*round(trump/(biden + trump + other),4)) |> 
  select(county.name, Biden, Trump, Other) |> 
  pivot_longer(cols = Biden:Other, 
               names_to = "cand",
               values_to = "percent") |> 
  pivot_wider(names_from = cand, 
              values_from = percent) |> 
  kableExtra::kable()
  

data(flights)

flights$hour.delay <- flights$arr_delay>60
table(flights$hour.delay)

flights <- flights |> 
  mutate(hour.delay = arr_delay>60)

flights |> 
  group_by(hour.delay) |> 
  summarise(count = n()) |> 
  mutate(prop = count/sum(count))

flights$hour.delay <- NA
flights$hour.delay[flights$arr_delay>60] <- "Yes"
flights$hour.delay[flights$arr_delay<=60] <- "No"
table(flights$hour.delay)

#Just doing this to delete the baseR work we did above
flights$hour.delay <- NULL

flights |> 
  mutate(hour.delay = if_else(arr_delay>60,"Yes","No")) |> 
  group_by(hour.delay) |> 
  summarise(n())

flights |> 
  mutate(state.origin = if_else(origin %in% c("JFK","LGA"), "NY", "NJ")) |> 
  group_by(state.origin) |> 
  summarize(n())

flights$delay.degree <- NA
flights$delay.degree[flights$arr_delay<0] <- "Early"
flights$delay.degree[flights$arr_delay>=0 & flights$arr_delay<10] <- "On Time"
flights$delay.degree[flights$arr_delay>=10] <- "Late"
table(flights$delay.degree)

flights$delay.degree <- NULL

flights |> 
  mutate(delay.degree = case_when(arr_delay<0 ~ "Early",
                                  arr_delay>=0 & arr_delay<10 ~ "On Time",
                                  arr_delay>=10 ~ "Late")) |> 
  group_by(delay.degree) |> 
  summarize(n())

flights$delay.degree <- NULL

flights |> 
  mutate(delay.degree = case_when(arr_delay<0 ~ "Early",
                                  arr_delay>=0 & arr_delay<10 ~ "On Time",
                                  arr_delay>=10 ~ "Late",
                                  is.na(arr_delay) ~ "No Data")) |> 
  group_by(delay.degree) |> 
  summarize(n())

flights$delay.degree <- NULL

flights |> 
  mutate(delay.degree = case_when(arr_delay<0 ~ "Early",
                                  arr_delay>=0 & arr_delay<10 ~ "On Time",
                                  arr_delay>=10 ~ "Late",
                                  .default = "No Data")) |> 
  group_by(delay.degree) |> 
  summarize(n())

data(flights)
data(airlines)
data(weather)
data(planes)

new <- merge(flights, planes, by = "tailnum")

new <- merge(flights, planes, by ="tailnum", all.x=T)

new <- inner_join(flights, planes,join_by(tailnum))


new <- left_join(flights, planes, join_by(tailnum))

planes2 <- planes |> 
            select(tailnum, manufacturer, model)
#Remember we need to keep tailnum so we can merge!

left_join(flights, planes2)

left_join(flights, planes |>  select(tailnum, manufacturer, model))

flights |> 
  mutate(mph = distance/(air_time/60)) |> 
  left_join(planes, join_by(tailnum))

planes |> 
  select(tailnum, manufacturer, model) |> 
  right_join(flights, join_by(tailnum))

left_join(flights, planes, join_by(tailnum==tailnum))

planes2 <- planes2 |> 
            rename(tailnumber=tailnum)

left_join(flights, planes2, join_by(tailnum==tailnumber))


weather |> 
  group_by(origin, year, month, day) |> 
  summarize(avg.wind = mean(wind_speed, na.rm=T)) |> 
  right_join(flights, join_by(origin, year, month, day))

data(flights)

flights <- flights |> 
  select(carrier,flight, dep_delay, arr_delay, distance, air_time)


flights |> 
  mutate(dep_delay = (dep_delay- mean(dep_delay,na.rm=T))/sd(dep_delay,na.rm=T),
         arr_delay = (arr_delay- mean(arr_delay,na.rm=T))/sd(arr_delay,na.rm=T),
         distance = (distance- mean(distance,na.rm=T))/sd(distance,na.rm=T),
         air_time = (air_time- mean(air_time,na.rm=T))/sd(air_time,na.rm=T)) |> 
  summarise(mean(dep_delay,na.rm=T),
            sd(dep_delay,na.rm=T))

stdrz <- function(x){
  (x-mean(x,na.rm=T))/sd(x,na.rm=T)
}

head(stdrz(flights$dep_delay))

flights |> 
  mutate(dep_delay = stdrz(dep_delay),
         arr_delay = stdrz(arr_delay),
         distance = stdrz(distance),
         air_time = stdrz(air_time)) |> 
  summarise(mean(dep_delay,na.rm=T),
            sd(dep_delay,na.rm=T))

flights |> 
  #R knows that the first thing is cols and the second thing is a function,
  #So you can ommit the .cols=, but I'm putting it here to be explicit
  mutate(across(.cols=dep_delay:air_time, .fns=stdrz))

flights |> 
  mutate(across(starts_with("dep"), stdrz))

flights |> 
  select(-carrier) |> 
  mutate(across(everything(), stdrz))

flights |> 
  mutate(across(where(is.numeric), stdrz))

flights |> 
  summarize(across(where(is.numeric), mean))

# flights |>
#   summarize(across(where(is.numeric), mean(na.rm=T)))


flights |> 
  summarize(across(where(is.numeric), \(x) mean(x,na.rm=T)))

pres <- rio::import("https://github.com/marctrussler/IDS-Data/raw/main/CountyPresData2020.Rds", trust=T)
head(pres)

pres |> 
  mutate(total = biden.votes + trump.votes + other.votes,
         #All the columns I care about end in votes. The 
         #mini function will take each column, divide by total, multiply by 100, 
         #and round to the 1st decimal place.
         across(ends_with("votes"), \(x) round((x/total)*100,1 ))) |> 
         slice(1:5)

#Function to standardize any numeric variables

stdrdz.dat <- function(df){
  df |> 
  mutate( across(where(is.numeric), \(x) (x-mean(x,na.rm=T))/sd(x,na.rm=T)))
}


pres |> 
  select(state, biden.votes:trump.votes) |> 
  stdrdz.dat() |> 
  slice(1:10)

