library(tidyverse)
library(here)
library(janitor)
clean_data <- read_csv(here("data", "combined", "1_clean_combined.csv"))
Arrange by pp, emotion, muscle. Add an empty bl_outlier column.
bl <- clean_data %>%
filter(bin == "bin_0") %>%
arrange(pp_no, emotion, muscle) %>%
mutate(bl_outlier = "")
stim <- clean_data %>%
filter(bin != "bin_0") %>%
arrange(pp_no, emotion, muscle) %>%
mutate(bl_outlier = "")
add mean and sd columns AND TRUE FALSE if bl_rms value is > 1.5sd above the mean for the participant, emotion, muscle
bl_screen <- bl %>%
group_by(pp_no, emotion, muscle) %>%
mutate(meanRMS = mean(rms), sdRMS = sd(rms)) %>%
mutate(bl_outlier = if_else(rms > meanRMS + 1.5*sdRMS, "TRUE", "FALSE"))
glimpse(bl_screen)
## Rows: 3,184
## Columns: 11
## Groups: pp_no, emotion, muscle [398]
## $ pp_no <chr> "pp401", "pp401", "pp401", "pp401", "pp401", "pp401",…
## $ condition <chr> "dyn", "dyn", "dyn", "dyn", "dyn", "dyn", "dyn", "dyn…
## $ emotion <dbl> 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626…
## $ bin <chr> "bin_0", "bin_0", "bin_0", "bin_0", "bin_0", "bin_0",…
## $ bin_no <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ trial <chr> "trial1", "trial2", "trial3", "trial4", "trial5", "tr…
## $ muscle <chr> "brow", "brow", "brow", "brow", "brow", "brow", "brow…
## $ rms <dbl> 10.7942, 8.6127, 11.0856, 12.0263, 11.1572, 8.7479, 9…
## $ bl_outlier <chr> "FALSE", "FALSE", "FALSE", "FALSE", "FALSE", "FALSE",…
## $ meanRMS <dbl> 9.892425, 9.892425, 9.892425, 9.892425, 9.892425, 9.8…
## $ sdRMS <dbl> 1.626683, 1.626683, 1.626683, 1.626683, 1.626683, 1.6…
bl_screen$bl_outlier <- as.logical(bl_screen$bl_outlier)
bl_screen %>%
group_by(pp_no, emotion, muscle) %>%
summarise(trialcount = n(), trialbad = sum(bl_outlier))
## # A tibble: 398 x 5
## # Groups: pp_no, emotion [199]
## pp_no emotion muscle trialcount trialbad
## <chr> <dbl> <chr> <int> <int>
## 1 pp401 626 brow 8 0
## 2 pp401 626 cheek 8 0
## 3 pp401 727 brow 8 1
## 4 pp401 727 cheek 8 1
## 5 pp401 828 brow 8 0
## 6 pp401 828 cheek 8 1
## 7 pp401 929 brow 8 1
## 8 pp401 929 cheek 8 1
## 9 pp402 626 brow 8 0
## 10 pp402 626 cheek 8 1
## # … with 388 more rows
bl_bind <- bl_screen %>%
select(pp_no:rms, bl_outlier)
stim$bl_outlier <- as.logical(stim$bl_outlier) # bind only works if data type is the same in both dfs, change stim outlier col to logicalback to char
Bind bl and stim back together using bind_rows and then sort. Use fill to complete empty cells in the bl_outlier column.
bl_stim <- bind_rows(bl_bind, stim) %>%
arrange(pp_no, emotion, trial, muscle, bin_no) %>%
fill(bl_outlier)
no_bl_outliers <- bl_stim %>%
filter(bl_outlier == FALSE) %>%
select(-bl_outlier)
no_bl_outliers %>%
write_csv(here("data", "combined", "2_clean_no_bl_outliers.csv"))
Just in case you need to refer to which trials were thrown out later
just_bl_outliers <- bl_stim %>%
filter(bl_outlier == TRUE)
just_bl_outliers %>%
write_csv(here("data", "combined", "3_clean_just_bl_outliers.csv"))