Skip to content

Commit

Permalink
updated sleep diary data cleaning scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
Megan McMahon committed Jul 8, 2021
1 parent 1344523 commit 754e1b3
Show file tree
Hide file tree
Showing 21 changed files with 11,481 additions and 3,150 deletions.
100 changes: 100 additions & 0 deletions R/act_fit_sleep_stats_merge.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@

data_dir <- '~/Box/CogNeuroLab/Wearables/data/'
fit <- read_csv(paste0(data_dir, "fitbit/sleep_stats_fitabase_beiwe_all.csv")) #paste0(data_dir, 'fitbit/fitbitSleepStatsGroup.csv'))
actiware <- read_csv(paste0(data_dir, 'actiwatch/wa_act_combined.csv'))
actiware_cl <- read_csv(paste0(data_dir, 'actiwatch/actiware_manual_clean/wa_act_combined.csv'))

# n subjects
length(unique(fit$subject))
length(unique(actiware$subject_id))

#clean actiware datasets

clean_actiware_combined_df <- function(df, suffix) {
TimeInBed <- df %>%
filter(interval_type == 'REST') %>%
select(subject_id, start_date, interval_number, duration) %>%
rename(time_in_bed = duration)

dfnew <- df %>%
dplyr::filter(interval_type == 'SLEEP') %>%
merge(TimeInBed, by = c('subject_id', 'start_date', 'interval_number')) %>%
select(where(function(x) all(!is.na(x)))) %>%
rename(
subject = subject_id,
sleep_duration = duration) %>%
mutate(
bed_time = ymd_hms(as_datetime(paste(start_date, start_time), format = '%m/%d/%Y %I:%M:%S %p')),
wake_time = ymd_hms(as_datetime(paste(end_date, end_time), format = '%m/%d/%Y %I:%M:%S %p'))) %>%
select(-interval_type) %>%
mutate(join_date = format(ymd_hms(wake_time), '%Y-%m-%d'),
redcap_id = str_pad(str_sub(subject, -3, -1), width = 3, pad = "0")) %>%
rename_at(vars(-subject, -redcap_id, -join_date), ~ paste0(., suffix))


return(dfnew)
}

act <- clean_actiware_combined_df(actiware, "_act")
act_cl <- clean_actiware_combined_df(actiware_cl, "_cl")


#fitbit subject numbers are different for subjects who used Beiwe, so need to match them with their full subject number from Actiware

# match date formats between fitbit and actiwatch datasets
act_cl <- act_cl %>%
mutate(cleaned = ifelse(analysis_name_cl == "Manual", 1, 0))


fitnew <- fit %>%
mutate(redcap_id = str_pad(str_sub(subject, -3, -1), width = 3, pad = "0"),
join_date = format(ymd_hms(WakeTime), '%Y-%m-%d')) %>%
rename(sleep_duration = MinutesAsleep,
time_in_bed = TimeInBed,
efficiency = Efficiency,
onset_latency = MinutesToFallAsleep,
awake_duration = AwakeDuration,
wake_time = WakeTime,
bed_time = BedTime) %>%
select(-X1, -Duration) %>%
rename_at(vars(-subject, -redcap_id, -join_date), ~ paste0(., '_fit')) %>%
filter(rowSums(is.na(.)) != ncol(.)-1)


df <- merge(act, fitnew, by = c('redcap_id', 'join_date'), all = T) %>%
rename(subject = subject.x) %>%
select(-subject.y)

redcap <- read.csv(paste0(data_dir, "WearableAssessment-Validation_DATA_2021-01-29_1236.csv"))

rc <- redcap %>%
filter(grepl("arm_1", redcap_event_name)) %>%
mutate(fitbit_device = ifelse((selected_devices___3 == 1),
"Fitbit Inspire HR", "Fitbit Charge 2 HR")) %>%
select(record_id, age_group, handedness, actiwatch_arm, fitbit_device) %>%
mutate(redcap_id = str_pad(str_sub(record_id, -3, -1), width = 3, pad = "0")) %>%
group_by(redcap_id) %>%
fill(age_group, handedness, .direction = "down") %>%
drop_na(actiwatch_arm) %>%
mutate(age_group = recode(age_group, "Young Adults", "Older Adults")) %>%
mutate(handedness = recode(handedness, "Left", "Right", "Both")) %>%
mutate(actiwatch_arm = recode(actiwatch_arm, "Left", "Right")) %>%
mutate(dominant = ifelse(handedness == actiwatch_arm, 1, 0)) %>%
ungroup()

write.csv(rc, paste0(data_dir, 'demographics_condition_assignments.csv'))

df <- merge(rc, df, by = 'redcap_id', all = T) %>%
select(subject, everything(), -record_id) %>%
group_by(redcap_id) %>%
fill(subject, .direction = "down") %>%
ungroup()

length(unique(df$subject))

check<- df %>%
select(subject, redcap_id, interval_number_act, bed_time_act, bed_time_fit)

unique(df$subject)

write.csv(df, file = paste0(data_dir, 'sleep_stats.csv'), row.names = F)
37 changes: 37 additions & 0 deletions R/fitabase_beiwe_sleep_stats_merge.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@

data_dir <- "~/Box/CogNeuroLab/Wearables/data/"
fitabase <- read.csv(paste0(data_dir, "fitbit/Fitabase_sleep_all.csv"))
beiwe <- read.csv(paste0(data_dir, "fitbit/Beiwe/Beiwe_sleep_all.csv"))

length(unique(c(beiwe$subject, fitabase$subject)))

colnames(fitabase)[! colnames(fitabase) %in% colnames(beiwe)]

head(fitabase)
head(beiwe)

fitabase <- fitabase %>%
mutate(BedTime = ymd_hms(mdy_hms(BedTime)),
WakeTime = ymd_hms(WakeTime))

beiwe <- beiwe %>%
mutate(BedTime = ymd_hms(BedTime),
WakeTime = ymd_hms(WakeTime))

d <- fitabase %>%
select(colnames(fitabase)[colnames(fitabase) %in% colnames(beiwe)]) %>%
arrange() %>%
rbind(arrange(beiwe[colnames(beiwe) %in% colnames(fitabase)])) %>%
select(subject, everything(), -X)

check <- d %>%
select(subject, BedTime, WakeTime)

length(unique(d$subject))

head(d)
tail(d)

write.csv(d, paste0(data_dir, "fitbit/sleep_stats_fitabase_beiwe_all.csv"))


21 changes: 21 additions & 0 deletions R/fitabase_sleep_stats.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@

library(tidyverse)

data_dir <- "~/Box/CogNeuroLab/Wearables/data/"
fitabase_files <- list.files(path = paste0(data_dir, "fitbit/"), pattern = "*sleepLogInfo*", full.names = T)

length(unique(substring(str_split_fixed(fitabase_files, pattern = "WA_", 2)[,2], 0, 5)))

d <- c()
for (file in fitabase_files){
data <- read.csv(file)
data <- data %>%
rename(BedTime = StartTime) %>%
mutate(subject = substring(str_split_fixed(file, pattern = "WA_", 2)[,2], 0, 5),
WakeTime = mdy_hms(BedTime) + minutes(MinutesAsleep))

d <- rbind(d, data)

}
head(d)
write.csv(d, paste0(data_dir, "fitbit/Fitabase_sleep_all.csv"))
Loading

0 comments on commit 754e1b3

Please sign in to comment.