#' Import raw human data.
#'
#' @param path
#'
#' @return
#' @export
#'
#' @examples
import_human <- function(path = '~/Dropbox/Calen/Work/search/search_experiments/pre_pandemic/white_noise_covert_nobars_uniform/_data/') {
# Input and Format Human Data
library(dplyr)
files <-
list.files(
path,
full.names = T
) %>% Filter(function(x) {
grepl("Results", x)
}, .)
import.data <- purrr::map(files, R.matlab::readMat)
ppd <- 60
cent.x <- 961
cent.y <- 601
# Format the raw data.
formatter.fcn <- function(x) {
search.data <- x
fileid <-
as.character(search.data$ResultsMat[[which(rownames(search.data$ResultsMat) == "Subject")]])
search.data <-
search.data$ResultsMat[[which(rownames(search.data$ResultsMat) == "responseFrame")]]
response.melt <- reshape2::melt(search.data)
names(response.melt) <-
c("data_label",
"blank1",
"condition",
"trial",
"level",
"session",
"data")
response.data <- response.melt %>%
dplyr::select(-blank1)
response.data.spread <- response.data %>% tidyr::spread(data_label, data)
names(response.data.spread) <-
c(
"condition",
"trial",
"level",
"session",
"stimX",
"stimY",
"x",
"y",
"whichButton",
"tPresent",
"clickDistance"
)
response.data <- response.data.spread %>%
filter(!trial == 1) %>%
mutate(whichButton = ifelse(
whichButton == 1,
"present",
ifelse(whichButton == 3, "absent", "none")
))
response.data <- response.data %>% mutate(clickDistance = sqrt((stimX - x)^2 + (stimY - y)^2)/60)
response.data[, c("condition", "trial", "session", "whichButton", "tPresent")] <-
purrr::map(response.data[, c("condition", "trial", "session", "whichButton", "tPresent")], as.factor) # convert columns to factor
response.data.labeled <- response.data
response.data.labeled$fileid <- as.factor(fileid) # add subject label
response.data.labeled$subject <- factor(stringr::str_extract(response.data.labeled$fileid, "anqi|rcw|arw|can"))
# stim location
response.data.labeled$stimX <-
response.data.labeled$stimX - cent.x
response.data.labeled$stimY <-
response.data.labeled$stimY - cent.y
# click location
response.data.labeled$x <-
response.data.labeled$x - cent.x
response.data.labeled$y <-
response.data.labeled$y - cent.y
if (stringr::str_detect(unique(response.data.labeled$fileid), "random_size")) {
szTrials <- randomsize.trials(x) %>% dplyr::select(-eccentricity)
szTrials$trial <- factor(szTrials$trial)
szTrials$session <- factor(szTrials$session)
szTrials$condition <- factor(szTrials$condition)
szTrials <- szTrials %>% dplyr::rename(bgSize = data)
response.data.labeled <- left_join(response.data.labeled, szTrials, by = c("trial", "condition", "level", "session"))
} else {
response.data.labeled$bgSize <- 1
}
levelLabs <- as.numeric(x$ResultsMat[row.names(x$ResultsMat) == "targetAmplitude"][[1]])
response.data.labeled$level <- factor(response.data.labeled$level,
levels = unique(response.data.labeled$level), labels = unique(levelLabs))
levels(response.data.labeled$level) <- round(as.numeric(levels(response.data.labeled$level)),5)
response.data.formatted <- response.data.labeled %>%
dplyr::select(trial, level, stimX, stimY, x, y, bgSize, whichButton, tPresent, fileid, subject)
response.data.formatted.1 <- response.data.formatted %>%
dplyr::rename(clickX = x, clickY = y, response = whichButton, tLevel = level)
response.data.formatted.1$tPresent <- ifelse(response.data.formatted.1$tPresent == 1, "present", "absent")
response.data.formatted.1 <- response.data.formatted.1 %>%
mutate(clickX = ifelse(response == "absent", NA, clickX),
clickY = ifelse(response == "absent", NA, clickY))
response.data.formatted.1 <- response.data.formatted.1 %>%
mutate(stimX = ifelse(tPresent == "absent", NA, stimX),
stimY = ifelse(tPresent == "absent", NA, stimY))
return(response.data.formatted.1)
}
# Apply formatting to all subject files.
formatted.human <- purrr::map(import.data, formatter.fcn)
# Combine table of subjects
human.search <- do.call(rbind, formatted.human)
# Round the position of the stimulus
human.search$stimX <- round(human.search$stimX / 60, 3)
human.search$stimY <- round(human.search$stimY / 60, 3)
# Round the location of the click.
human.search$clickX <- round(human.search$clickX / 60, 3)
human.search$clickY <- round(human.search$clickY / 60, 3)
human.search$trial <- as.numeric(as.character(human.search$trial))
human.search$tLevel <- round(as.numeric(as.character(human.search$tLevel)), 3)
return(human.search)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.