You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R语言为认知任务数据的Set trials判断作答准确性?

问题描述

我在编写循环和函数方面困难很大,一直靠if_else()和ifelse函数绕开这类操作,因为它们的逻辑结构更容易理解,但现在遇到了新问题。

我正在处理认知任务数据,每个试验要求参与者对variableA、variableB、variableC三个变量做出回应,我的数据框DF里每个试验对应这三个变量的列。需要判断作答是否正确,其中Set类型试验的正确条件是variableA == 1、variableB == 1且variableC == 2(部分试验有不同标准,这里只针对Set类型简化说明)。

我能按QType筛选Set和Test类型的行,但没法正确写代码实现「若A1、B1且C==2则标记为正确(比如1、True)」的逻辑。以下是我的数据框定义和尝试的代码:

数据框定义

DF <- data.frame(QType = c("Set","Set","Set","Set","Set","Test"), 
                 varA = c("1","1","2","1","1","2"),
                 varB = c("1","1","1","0","1","0"), 
                 varC = c("2","1","2","2","2","2"), 
                 correct = "")

尝试的代码

# 尝试1
DF$correct <- DF %>%
  filter(QType == "Set") %>%
  if_else(c(varA == 1 & varB == 1 & varC == 2), 1, 0)

# 尝试2
SetCorrect <- c(DF$varA == 1 & DF$varB == 1 & DF$varC == 2) 
DF$correct <- DF %>%
  filter(QType == "Set") %>%
  if_else(SetCorrect, 1, 0)

# 尝试3
DF %>%
  filter(QType == "Set") %>%
  mutate(correct = case_when(varA == "1" ~ "1",
                             varB == "1" ~ "1",
                             varC == "1" ~ "1"))
解决方案

你的问题主要出在两个点:

  1. 变量类型不匹配:varA、varB、varC是字符型(定义时用了带引号的"1"/"2"),但你用数值1/2做判断,导致条件不成立;
  2. 赋值逻辑有误:直接筛选后赋值会丢失行数匹配,应该针对Set类型行单独判断,其他行保留原状态。

推荐两种符合你习惯的实现方式:

方法1:用if_else分步判断

library(dplyr)

# 可选:把字符型变量转成数值型,避免后续判断出错
DF <- DF %>% mutate(across(c(varA, varB, varC), as.numeric))

# 给Set类型标记正确/错误,Test类型留空
DF <- DF %>%
  mutate(correct = if_else(
    QType == "Set" & varA == 1 & varB == 1 & varC == 2,
    1,  # 符合条件标记为1
    if_else(QType == "Set", 0, "")  # Set类型不符合标记为0,Test类型留空
  ))

方法2:用case_when适配多条件扩展

如果后续要加其他试验类型的判断标准,用case_when会更清晰:

library(dplyr)

DF <- DF %>%
  mutate(
    # 统一变量类型,不想转类型的话,把判断里的1换成"1"、2换成"2"即可
    across(c(varA, varB, varC), as.numeric),
    correct = case_when(
      QType == "Set" & varA == 1 & varB == 1 & varC == 2 ~ 1,
      QType == "Set" ~ 0,  # 其他Set类型都标记为错误
      TRUE ~ ""  # 非Set类型保持原空值
    )
  )

运行后得到的正确结果:

QTypevarAvarBvarCcorrect
Set1121
Set1110
Set2120
Set1020
Set1121
Test202

内容的提问来源于stack exchange,提问作者hwright

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:20:08