R 根据其他两列中的匹配字符串创建第三列
我试图计算并创建一个新的列,用于测试的正确分数。Recall.CRESP是一个列,指定通过网格坐标选择的测试的正确答案。Recall.RESP显示参与者的响应 这些列如下所示:R 根据其他两列中的匹配字符串创建第三列,r,R,我试图计算并创建一个新的列,用于测试的正确分数。Recall.CRESP是一个列,指定通过网格坐标选择的测试的正确答案。Recall.RESP显示参与者的响应 这些列如下所示: |Recall.CRESP |Recall.RESP | |---------------------------------|---------------------------------| |grid35gri
|Recall.CRESP |Recall.RESP |
|---------------------------------|---------------------------------|
|grid35grid51grid12grid43grid54 |grid35grid51grid12grid43grid54 |
|grid11gird42gird22grid51grid32 |grid11gird15gird55grid42grid32 |
例如,在该表的第1行中,参与者获得了5/5的正确率,因为Recall.CRESP的网格坐标与Recall.RESP匹配。然而,在第2行中,参与者只获得了2/5的正确率,因为只有第一个和最后一个网格坐标是相同的。坐标的顺序必须匹配才能正确
我的新列应该分别为这两行显示5和2。我不确定如何分割网格坐标,也不确定如何告诉R顺序必须匹配才能正确。处理这个问题的一个好方法是使用列表列,其中可以以易于迭代的方式存储一整套响应或值。在tidyverse语法中 图书馆管理员 响应在除第一个网格/网格外的所有网格上拆分% mutatecorrect=map2Recall.CRESP,Recall.RESP,`==`, 分数=映射正确,求和 得分 >一个tibble:2x4 >Recall.CRESP Recall.RESP正确分数 > > 1 5 > 2 2 如果您想更仔细地查看数据,请拉出各个列。使用简单的mapply和自定义拆分网格函数,您可以在不使用tidyverse的情况下完成此操作。我假设只有数字相关:
df <- data_frame(Recall.CRESP = c("grid35grid51grid12grid43grid54", "grid11gird42gird22grid51grid32"),
Recall.RESP = c("grid35grid51grid12grid43grid54", "grid11gird15gird55grid42grid32"))
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, df$Recall.CRESP, df$Recall.RESP)
# A tibble: 2 x 3
Recall.CRESP Recall.RESP Res
<chr> <chr> <int>
1 grid35grid51grid12grid43grid54 grid35grid51grid12grid43grid54 5
2 grid11gird42gird22grid51grid32 grid11gird15gird55grid42grid32 2