我有一个自定义R函数,可以在测试中为得分创建一个新列。 Recall.CRESP
是一个列,用于指定通过网格坐标选择的测试的正确答案。 Recall.RESP
显示参与者的回应。
这些列看起来像这样:
|RecallType |Recall.CRESP |Recall.RESP |
|-----------|---------------------------------|---------------------------------|
|Forwards |grid35grid51grid12grid43grid54 |grid35grid51grid12grid43grid54 |
|Backwards |grid11gird42gird22grid51grid32 |grid11gird15gird55grid42grid32 |
在第1行中,参与者得到5/5正确,因为Recall.CRESP的网格坐标与Recall.RESP 按正确的顺序匹配 。
以下功能可以解决这个问题。
attach(edata)
df <- data_frame(Recall.CRESP, Recall.RESP)
split_grid <- function(x) {
unlist(regmatches(x, gregexpr("[[:digit:]]+", x)))
}
compare <- function(x, y) {
sum(split_grid(x) == split_grid(y))
}
df$Res <- mapply(compare, Recall.CRESP, Recall.RESP)
detach(edata)
# A table: 2 x 3
Recall.CRESP Recall.RESP Res
<chr> <chr> <int>
1 grid35grid51grid12grid43grid54 grid35grid51grid12grid43grid54 5
2 grid11gird42gird22grid51grid32 grid11gird15gird55grid42grid32 2
但是这个功能需要编辑。我桌子第二行的答案是不正确的。当RecallType
在此行中设置为backwards
时,我希望当Recall.Resp是Recall.Cresp的相反序列时,该函数将正在计算正确的分数。在这个例子中,正确的答案是1,因为只有网格42匹配(这是Recall CRESP的第二个坐标和Recall RESP向后计数的第二个坐标)。
我希望这是有道理的。有什么建议吗?