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

按参与者分组计算含NA的两列RT数据标准差的实现问题

问题解决与实现方案

报错原因分析

你遇到的报错有两个核心原因:

  1. dplyr版本兼容问题:如果你的dplyr版本低于1.0.0,across()函数无法在summarise()中使用,旧版本仅支持在mutate()/filter()等数据掩码动词中调用across()。
  2. 代码逻辑不符合需求:你原本的代码是分别计算BlackGood_rt和WhiteGood_rt两列各自的标准差,但需求是将两列的所有非NA反应时合并后计算单个标准差。

正确实现代码

基础版本(适用于dplyr 1.0.0+)

直接将两列数据合并为一个向量,过滤NA后计算标准差:

BWGood_sd <- BWGood %>% 
  group_by(participant) %>% 
  summarise(rt_combined_sd = sd(c(BlackGood_rt, WhiteGood_rt), na.rm = TRUE))

严谨版本(处理极端情况)

如果存在某参与者两列均为NA,或仅剩下1个有效数据点(标准差计算需至少2个值)的情况,可添加判断避免报错:

BWGood_sd <- BWGood %>% 
  group_by(participant) %>% 
  summarise(
    # 提取两列所有非NA值
    valid_rt = na.omit(c(BlackGood_rt, WhiteGood_rt)),
    # 仅当有效数据≥2个时计算标准差,否则返回NA
    rt_combined_sd = if (length(valid_rt) >= 2) sd(valid_rt) else NA_real_
  ) %>% 
  # 移除中间辅助列
  select(-valid_rt)

兼容旧版dplyr(<1.0.0)

如果无法升级dplyr,可使用summarise()结合基础R逻辑实现:

BWGood_sd <- BWGood %>% 
  group_by(participant) %>% 
  summarise(
    rt_combined_sd = {
      combined <- c(BlackGood_rt, WhiteGood_rt)
      combined <- combined[!is.na(combined)]
      if (length(combined) >= 2) sd(combined) else NA_real_
    }
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:20:11