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

如何基于被试所见刺激为R DataFrame生成8个正误评分列?

生成记忆测试正确得分列的R实现

问题背景

现有记录记忆测试结果的DataFrame:

  • list列存储每位被试实际看到的主题
  • 其余列是被试对各主题/干扰项的判断值(1=标记为见过,0=标记为没见过)

需为每个判断列生成对应得分列:

  • 正确(得1):被试见过该主题且判断为1,或没见过该主题且判断为0
  • 错误(得0):被试见过该主题但判断为0,或没见过该主题但判断为1

注意:原始代码存在笔误,定义了suicide1、suicide2、memory1、memory2变量,但构建DataFrame时误写为suicide、memory,需先修正。


解决方案代码

1. 修正并加载原始数据

# 原始数据修正笔误后加载
list <- c("suicide memory time","suicide vomit time","vomit alcohol time","  ",
          "  ","alcohol suicide children")
id <- c(1:6)
suicide1<- c(1,1,0,0,0,1)
suicide2<- c(1,1,1,0,0,1)
memory1 <- c(1,0,0,1,0,0)
memory2 <- c(1,0,0,0,0,0)
alcohol<- c(0,1,1,1,1,1)
time<-    c(1,0,1,1,1,0)
foil1<-   c(0,0,0,0,0,0)
foil2 <-  c(0,0,1,0,0,0)
# 修正df列名,匹配前面定义的变量
df<- data.frame(list, id, suicide1, suicide2, memory1, memory2, alcohol, time, foil1, foil2)

2. 核心逻辑实现

# 处理list列:将每行主题拆分为干净的字符向量,去除空值和多余空格
df$seen_themes <- lapply(df$list, function(x) {
  themes <- strsplit(trimws(x), "\\s+")[[1]]
  if(length(themes) == 0 || themes == "") character(0) else themes
})

# 定义计算得分的函数
calculate_score <- function(col_name, df) {
  # 从列名提取主题(如从suicide1提取suicide)
  theme <- gsub("\\d+$", "", col_name)
  # 获取被试的判断值
  judgment <- df[[col_name]]
  # 判断每行被试是否见过该主题
  seen <- sapply(df$seen_themes, function(x) theme %in% x)
  # 计算得分:正确为1,错误为0
  as.integer((seen & judgment == 1) | (!seen & judgment == 0))
}

# 获取需要生成得分的判断列(排除无关列)
judgment_cols <- setdiff(names(df), c("list", "id", "seen_themes"))

# 遍历所有判断列,自动生成对应得分列
for(col in judgment_cols) {
  score_col_name <- paste0(col, "_score")
  df[[score_col_name]] <- calculate_score(col, df)
}

# 查看结果(可选)
print(df[, c("id", "list", judgment_cols, paste0(judgment_cols, "_score"))])

代码逻辑说明

  1. 处理list列:把每个被试的所见主题转换为无空格、无空值的字符向量,方便后续判断
  2. 得分计算函数:从列名提取对应主题,结合被试是否见过该主题的状态、判断值,按规则生成得分
  3. 批量生成列:自动遍历所有判断列,无需手动逐个创建得分列,确保效率和准确性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:25:26