Installing packages required for cleaning and analysis

install.packages("tidyverse", repos = "https://cran.studio.com/")
install.packages("zoo", repos = "https://cran.studio.com/")

Loading required packages

library(tidyverse)
library(zoo)

Importing and Renaming Relevant Data From Dataset 1

daily_activity1 <- read.csv(file.path(dir1, "dailyActivity_merged.csv"))
seconds_heartrate1 <- read.csv(file.path(dir1, "heartrate_seconds_merged.csv"))
minutes_sleep1 <- read.csv(file.path(dir1, "minuteSleep_merged.csv"))
# View imported files
head(daily_activity1)
head(seconds_heartrate1)
head(minutes_sleep1)

Importing and Renaming Relevant Data from Dataset 2

daily_activity2 <- read.csv(file.path(dir2, 'dailyActivity_merged.csv'))
days_sleep <- read.csv(file.path(dir2, 'sleepDay_merged.csv'))
seconds_heartrate2 <- read.csv(file.path(dir2, 'heartrate_seconds_merged.csv'))
minutes_sleep2 <- read.csv(file.path(dir2, 'minuteSleep_merged.csv'))
# View imported files
head(daily_activity2)
head(days_sleep)
head(seconds_heartrate2)
head(minutes_sleep2)

Importing and Renaming Relevant Data from Dataset 3

target_files <- c("activity", "activity_level", "heart_rate", "sleep", "sleep_hypnogram", "readiness")
pattern <- paste0("^(", paste(target_files, collapse = "|"), ")\\.csv$")

file_paths <- list.files(
  path = "C:/Users/Somon/OneDrive/Desktop/Coursera/04-Case Study/Datasets/ifh_affect",
    pattern = pattern,
    full.names = TRUE,
    recursive = TRUE
)
# Group files by their base name (without extension)
file_groups <- split(file_paths, tools::file_path_sans_ext(basename(file_paths)))

# Read and process each group into a named list
data_list <- map(file_groups, function(paths) {
  map_df(paths, ~ {
    read_csv(.x, col_types = cols(.default = "c")) %>%
      mutate(participants = basename(dirname(dirname(.x))), .before = 1)
  })
})
list2env(data_list, envir = .GlobalEnv)
head(activity)

Combining the Data from Dataset 1 and 2

daily_activity_combined <- rbind(daily_activity1, daily_activity2)
minutes_sleep_combined <- rbind(minutes_sleep1, minutes_sleep2)
seconds_heartrate_combined <- rbind(seconds_heartrate1, seconds_heartrate2)
head(daily_activity_combined)
head(minutes_sleep_combined)
head(seconds_heartrate_combined)

Converting Character Columns in Dataset 3 to Numeric

activity_combined <- activity %>%
  mutate(
    across(
      .cols = c(
        score_stay_active,
        score_meet_daily_targets,
        score_training_frequency,
        score_training_volume
      ),
      .fns = ~ as.numeric(as.character(.x))
    )
  )
head(activity_combined)