从网格坐标中找到正确的平均数

时间:2018-01-08 18:09:37

标签: r

我正在尝试计算参与者在记忆任务中得分正确的平均数。我有一个名为RecallType的列告诉我参与者是通过前向记忆回忆(称为forwards)还是通过向后记忆回忆(称为backwards)进行评估。我还有一个名为ProbeState的列,用于标识内存任务的类型,其中有两个。在此列中,我有positionsdigits。这些都是我感兴趣的变量。

内存任务本身被分为两列。 Recall.CRESP是一个列,用于指定通过网格坐标选择的内存测试的正确答案。 Recall.RESP显示参与者的回应。

这些列看起来像这样:

|Recall.CRESP                     | Recall.RESP                     |
|---------------------------------|---------------------------------|                 
|grid35grid51grid12grid43grid54   | grid35grid51grid12grid43grid54  |                
|grid11gird42gird22grid51grid32   | grid11gird15gird55grid42grid32  |

因此,例如在此表的第1行中,参与者得到5/5正确,因为Recall.CRESP的网格坐标与Recall.RESP匹配。但是在第2行中,参与者只有2/5正确,因为只有第一个和最后一个网格坐标是相同的。坐标的顺序必须匹配才能正确。

理想情况下,我很乐意从任何回应中学习。如果您回复,请提出一些意见。

感谢。

2 个答案:

答案 0 :(得分:1)

由于您不熟悉stackoverflow,请阅读此处有关如何制作可重现示例的答案,以便明确提出问题:How to make a great R reproducible example?

根据我的理解,你正在寻找拆分你的字符串然后计算相同的情况。一些代码可以帮助您开始:

a = "grid11gird42gird22grid51grid32"
b = "grid11gird15gird55grid42grid32"

a1 = strsplit(a, "grid|gird")
b1 = strsplit(b, "grid|gird")
table(unlist(a1) == unlist(b1))["TRUE"] - 1

您应该能够使用包group_by的{​​{1}}和summarize功能,根据您感兴趣的变量取平均值。

答案 1 :(得分:1)

尝试使用regmatches

fun=function(x)do.call(rbind,regmatches(x,gregexpr(".*?\\d.",x)))
with(dat,rowSums(fun(Recall.CRESP)==fun(Recall.RESP)))
[1] 5 2

DATA:

structure(list(Recall.CRESP = c("grid35grid51grid12grid43grid54", 
"grid11grid42grid22grid51grid32"), Recall.RESP = c("grid35grid51grid12grid43grid54", 
"grid11grid15grid55grid42grid32")), .Names = c("Recall.CRESP", 
"Recall.RESP"), row.names = c(NA, -2L), class = "data.frame")