Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 根据其他两列中的匹配字符串创建第三列_R - Fatal编程技术网

R 根据其他两列中的匹配字符串创建第三列

R 根据其他两列中的匹配字符串创建第三列,r,R,我试图计算并创建一个新的列,用于测试的正确分数。Recall.CRESP是一个列,指定通过网格坐标选择的测试的正确答案。Recall.RESP显示参与者的响应 这些列如下所示: |Recall.CRESP |Recall.RESP | |---------------------------------|---------------------------------| |grid35gri

我试图计算并创建一个新的列,用于测试的正确分数。Recall.CRESP是一个列,指定通过网格坐标选择的测试的正确答案。Recall.RESP显示参与者的响应

这些列如下所示:

|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