我已經搜索了以前回答的問題,但尚未能構建功能正常的解決方案。這裏是我的演示數據的情況:根據數據幀列表中N-1行的值選擇行N
說我有科目完成計算機任務,他們在每個試驗中給予答覆。我從關於他們是否給了準確的反應每次試驗結束與數據,以及他們的反應時間爲:
sub1 <- data.frame(acc = round(rnorm(10, mean=.65, sd=.25), 0), RT = round(rnorm(10, mean=270, sd=30), 0))
sub2 <- data.frame(acc = round(rnorm(10, mean=.65, sd=.25), 0), RT = round(rnorm(10, mean=270, sd=30), 0))
sub3 <- data.frame(acc = round(rnorm(10, mean=.65, sd=.25), 0), RT = round(rnorm(10, mean=270, sd=30), 0))
sub.list <- list(sub1, sub2, sub3)
我創建了一個列表,其中每個元素都是一個對象的數據。
> sub.list
[[1]]
acc RT
1 1 259
2 0 187
3 1 256
4 1 288
5 1 304
6 1 265
7 1 312
8 1 196
9 1 335
10 0 276
[[2]]
acc RT
1 1 215
2 0 325
3 1 290
4 0 297
5 0 281
6 1 294
7 0 289
8 1 252
9 0 364
10 0 241
[[3]]
acc RT
1 0 292
2 0 267
3 0 240
4 1 321
5 1 292
6 0 269
7 1 241
8 1 206
9 1 250
10 1 283
現在來了我的問題。我想爲每個只有RTs的主題創建另一個列,以便進行精確的測試,而且之前也有精確的響應。這裏有一個非 - 工作for循環和我試圖結束的例子。
for(i in 1:length(sub.list)){
for(j in 2:nrow(sub.list[[i]])){
if(sub.list[[i]][(j-1), "acc"]==1 & sub.list[[i]][j, "acc"]==1){
sub.list[[i]][j,]$correct.RT <- sub.list[[i]][j, "RT"]
} else {
sub.list[[i]][j,]$correct.RT <- NA
}
}
}
> sub.list
[[1]]
acc RT correctRT
1 1 259 NA
2 0 187 NA
3 1 256 NA
4 1 288 288
5 1 304 304
6 1 265 265
7 1 312 312
8 1 196 196
9 1 335 335
10 0 276 NA
[[2]]
acc RT correctRT
1 1 215 NA
2 0 325 NA
3 1 290 NA
4 0 297 NA
5 0 281 NA
6 1 294 NA
7 0 289 NA
8 1 252 NA
9 0 364 NA
10 0 241 NA
[[3]]
acc RT correctRT
1 0 292 NA
2 0 267 NA
3 0 240 NA
4 1 321 NA
5 1 292 292
6 0 269 NA
7 1 241 NA
8 1 206 206
9 1 250 250
10 1 283 283
我這樣做的理由是,我可以單獨對這些試驗執行功能。例如:
> sapply(sub.list, function(x) mean(x$correctRT, na.rm=TRUE))
[1] 283.3333 NaN 257.7500
我知道必須與mapply或其他的一個應用函數,而不是一個笨拙,緩慢的for循環來做到這一點的一種方式,但我掛了是如何引用順序排。
任何幫助非常感謝!
不完全正確的時候應該是NA當sub.list [N,「acc」] == 0 ** OR ** sub.list [(N-1),「acc」] = = 0.希望更清楚。我想從acc = 1的試驗中得出RT,這些試驗在出現錯誤後纔會發生(上一行的acc = 0)。 – YTD
爲了使數據具有可重現性,如果您要使用隨機樣本,請從'set.seed(123)'開始。 – flodel
抱歉。在R中生成隨機樣本不太熟悉,但這對知道非常有用。我將來會這樣做。 – YTD