Я использую функцию ddply (plyr), чтобы вычислить что-то отдельно по идентификатору участника (pid). Однако по какой-то причине он не возвращает отдельные значения на pid, но это же значение на всех pid.ddply не возвращает значения из функции split по переменной
Образец данных:
sdt<-c("Hit","Hit","Miss","Miss","False Alarm","Correct Reject","Correct Reject","Correct Reject",
"Hit","Hit","Hit","Miss","False Alarm","False Alarm","False ALarm","Correct Reject")
pid<-c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2)
adhd_p<-data.frame(sdt,pid)
Функция:
ddply(adhd_p, "pid", summarise,
hitrate=(count(adhd_p$sdt=="Hit")[[2,2]])/((count(adhd_perf$sdt=="Hit")[[2,2]])+(count(adhd_p$sdt=="Miss")[[2,2]])),
falsealarmrate=(count(adhd_p$sdt=="False Alarm")[[2,2]])/((count(adhd_p$sdt=="False Alarm")[[2,2]])+(count(adhd_p$sdt=="Correct Reject")[[2,2]])))
Если это помогает понять, что я расчета ... Участники могут либо "Хит" (ответить утвердительно на цель), " «Мисс» (не отвечайте на цель), «Исправить отклонение» (не реагировать на дистрактор) или «False Alarm» (ответьте утвердительно на distractor). Таким образом, «hitrate» - количество хитов/хитов + промахов, а «falsealarmrate» - количество ложных тревог/ложных сигналов + правильный отклонение.
Что я делаю неправильно?
Спасибо за ваше время.
Edit: Над проблема решена очень быстро редактирования кода
ddply(adhd_p, "pid", summarise,
hitrate=(count(sdt=="Hit")[[2,2]])/((count(sdt=="Hit")[[2,2]])+(count(sdt=="Miss")[[2,2]])),
falsealarmrate=(count(sdt=="False Alarm")[[2,2]])/((count(sdt=="False Alarm")[[2,2]])+(count(adhd_p$sdt=="Correct Reject")[[2,2]])))
Я теперь понимаю, что мне нужно разделить более двух переменных, а не только один. Однако добавление переменной времени:
time<-c(1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8)
и слияние его с другими
adhd_p<-data.frame(sdt,pid,time)
Делает новый сценарий создания «подстрочный вне границ» ошибки.
ddply(adhd_p, .(pid,time), summarise,
hitrate=(count(sdt=="Hit")[[2,2]])/((count(sdt=="Hit")[[2,2]])+(count(sdt=="Miss")[[2,2]])),
falsealarmrate=(count(sdt=="False Alarm")[[2,2]])/((count(sdt=="False Alarm")[[2,2]])+(count(sdt=="Correct Reject")[[2,2]])))
Любые мысли?
Фантастический, спасибо за объяснение! Это помогает сделать это так. – smgmu
В качестве последующего вопроса, как бы повторить описанную выше процедуру, но разделить на вторую переменную (скажем, была ли переменная «время», по которой каждый участник менялся)? Я попытался изменить «pid» на c («pid», «time»), но он возвращает ошибку: «Ошибка: индекс за пределами границ» – smgmu
Аргумент '.variables' может принимать вектор, поэтому вы можете использовать' ddply (adhd_p, c ("pid", "time"), ...) '. Это создаст каждую комбинацию, найденную в кадре данных (pid 1 в момент времени 1, pid 1 в момент времени 2, pid 2 в момент времени 1 и т. Д.). – Joe