如何在R中为ltm包的Cronbach's alpha测试准备数据集?
R长表转宽表适配ltm包Cronbachα计算方法
前置说明
我们假设你的原始两列数据框命名为df_long,两列分别为Question(存储问题编号)、Value(存储对应得分)。
方法1:tidyverse 实现(最直观易用)
先分组生成每个问题下的观测行号,再做宽表转换即可,不会出现嵌套列表问题:
# 加载依赖包 library(tidyverse) library(ltm) # 长表转宽表核心代码 df_wide <- df_long %>% group_by(Question) %>% mutate(row_id = row_number()) %>% pivot_wider(names_from = Question, values_from = Value) %>% select(-row_id) # 直接调用cronbach.alpha函数 cronbach.alpha(df_wide)
方法2:基础R实现(无需安装额外依赖)
用基础自带的reshape函数即可完成转换:
library(ltm) # 生成分组行号 df_long$row_id <- ave(rep(1, nrow(df_long)), df_long$Question, FUN = cumsum) # 执行长转宽操作 df_wide <- reshape(df_long, idvar = "row_id", timevar = "Question", direction = "wide") # 清理冗余列、修正列名 df_wide <- df_wide[,-1] colnames(df_wide) <- gsub("Value\\.", "", colnames(df_wide)) # 调用计算函数 cronbach.alpha(df_wide)
格式校验
如果需要确认转换后格式和LSAT示例一致,可以执行以下代码对比结构:
# 查看内置LSAT数据结构 str(LSAT) # 查看转换后的数据结构 str(df_wide)
内容的提问来源于stack exchange,提问作者Alokin
相关产品推荐
相关产品推荐

