R语言量表反向计分代码运行失败及t检验问题求助
R语言调研数据处理修正指南(反向计分+独立样本t检验)
代码错误梳理
if_else语法完全错误:if_else仅接受3个参数(条件、满足条件的返回值、不满足的返回值),你写了多个返回值,且1=5是赋值语句而非数值,完全不符合语法规则。- 管道操作未赋值:前几轮
mig |> mutate(...)未将结果存回mig,所有修改都未生效,仅最后用mig <- mig |> ...的recode部分实际起作用。 - 添加索引时的语法错误:
mig<- mig后直接换行写mutate,缺少管道|>或正确赋值逻辑,导致指数未成功添加到数据集。 - t检验类型错误:你需要的是独立样本t检验,但代码中用了
paired = TRUE(配对t检验参数),完全不符合需求;且独立样本t检验更适合用公式形式(因变量~分组变量)而非直接传两个向量。 - 反向计分可简化:无需逐个
recode,利用6 - 原始得分即可实现1↔5、2↔4的转换(6-1=5,6-2=4,6-3=3),完美匹配你的反向计分规则。
修正后的完整代码
library(tidyverse) library(report) # 读取数据 mig <- readxl::read_excel("data/data_ExperimentMigration2024_2024-07-04_20-34.xlsx") # 反向计分:用6-原始值实现简洁转换 mig <- mig |> mutate( # 对反向表述题目进行计分转换 ME03_01 = 6 - ME03_01, ME03_02 = 6 - ME03_02, ME03_04 = 6 - ME03_04, ME03_09 = 6 - ME03_09 ) # 构建指数并添加到数据集 mig <- mig |> rowwise() |> mutate(einst_index = mean(c(ME03_01, ME03_02, ME03_03, ME03_04, ME03_05, ME03_07, ME03_09, ME03_10), na.rm = TRUE)) |> ungroup() # 计算指数的均值和标准差 mig |> summarise( 均值 = mean(einst_index, na.rm = TRUE), 标准差 = sd(einst_index, na.rm = TRUE) ) # 独立样本t检验:假设EM01/EM02/EM03是分组变量(如因子或0/1编码) # 负向刺激组对比 t.test(einst_index ~ EM01, data = mig) |> report_table() # 正向刺激组对比 t.test(einst_index ~ EM02, data = mig) |> report_table() # 中性刺激组对比 t.test(einst_index ~ EM03, data = mig) |> report_table()
额外说明
- 反向计分:确认
ME03_01/02/04/09确实为反向表述题目后再使用6-值转换,其他反向题可同理添加。 - 指数构建:
rowwise()+mean()的写法更贴合tidyverse风格,逻辑更清晰。 - t检验:确保
EM01/EM02/EM03是分组变量(如1=接受对应刺激,0=未接受),若为字符型变量,需先转为因子factor(EM01)再进行检验。
内容的提问来源于stack exchange,提问作者Alina Dzaferovic
相关产品推荐
相关产品推荐

