编辑R中的函数以基于向后序列计算分数

时间:2018-01-15 19:08:05

标签: r

我有一个自定义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向后计数的第二个坐标)。

我希望这是有道理的。有什么建议吗?

0 个答案:

没有答案