我使用ddply函數(plyr)根據參與者ID(pid)分別計算某些東西。但是,由於某種原因,它不會通過pid返回單獨的值,而是在所有pid中都具有相同的值。ddply不返回函數按變量分割的值
的樣本數據:
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]])))
如果它有助於瞭解我計算...參與者可以 「打」(肯定響應的目標),「小姐「(不要回應目標),」正確拒絕「(不要回應干擾),或」錯誤警報「(肯定地迴應干擾)。因此,「hitrate」是命中/命中+未命中的次數,「falsealarmrate」是錯誤警報/錯誤警報+正確拒絕的次數。
我在做什麼錯?
謝謝你的時間。
編輯:上面的問題很快就解決了通過修改代碼來
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 2015-02-11 17:18:30
作爲一個後續問題,我將如何重複上述過程,但是會被第二個變量分割(例如,如果每個參與者都有一個「時間」變量)?我嘗試將「pid」更改爲c(「pid」,「time」),但它返回錯誤:「Error:subscript out of bounds」 – smgmu 2015-02-11 17:49:15
'.variables'參數可以接受一個向量,所以可以使用'ddply (adhd_p,c(「pid」,「time」),...)'。這將生成數據幀中找到的每個組合(時間1的pid 1,時間2的pid 1,時間1的pid 2等)。 – Joe 2015-02-11 17:57:07