我正在尝试计算参与者在记忆任务中得分正确的平均数。我有一个名为RecallType
的列告诉我参与者是通过前向记忆回忆(称为forwards
)还是通过向后记忆回忆(称为backwards
)进行评估。我还有一个名为ProbeState
的列,用于标识内存任务的类型,其中有两个。在此列中,我有positions
和digits
。这些都是我感兴趣的变量。
内存任务本身被分为两列。 Recall.CRESP
是一个列,用于指定通过网格坐标选择的内存测试的正确答案。 Recall.RESP
显示参与者的回应。
这些列看起来像这样:
|Recall.CRESP | Recall.RESP |
|---------------------------------|---------------------------------|
|grid35grid51grid12grid43grid54 | grid35grid51grid12grid43grid54 |
|grid11gird42gird22grid51grid32 | grid11gird15gird55grid42grid32 |
因此,例如在此表的第1行中,参与者得到5/5正确,因为Recall.CRESP
的网格坐标与Recall.RESP
匹配。但是在第2行中,参与者只有2/5正确,因为只有第一个和最后一个网格坐标是相同的。坐标的顺序必须匹配才能正确。
理想情况下,我很乐意从任何回应中学习。如果您回复,请提出一些意见。
感谢。
答案 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")