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

在R语言中按列计算抑郁得分的循环实现问题求助

问题分析与解决方案

你的代码报错核心原因是逻辑错误导致下标越界,同时str_count的用法完全不符合需求,以下是具体问题和修正方案:

原代码的关键错误

  1. str_count使用错误:你没有传入要统计的目标(即当前受试者的答案列),直接统计固定字符串的字符数,完全无法计算对应答案的数量。
  2. 赋值逻辑颠倒:scores1[,suma_x]=seq用得分值作为列下标,而得分可能远超过你初始化的43列(比如原代码计算出的suma_x会是107),直接触发下标越界;正确逻辑应该是把得分赋值给对应受试者的列。
  3. 列名不匹配:初始化的scores1列名是V1-V43,但原数据列名是Person类,后续无法正确对应。

修正后的代码(循环版)

适合你原来的思路,修正逻辑错误:

# 定义答案与分数的映射规则
score_map <- c(
  "Not at all" = 0,
  "Several days" = 1,
  "More than half the days" = 2,
  "Nearly every day" = 3
)

# 初始化结果矩阵,列数与原数据一致,列名同步原数据
scores1 <- matrix(nrow = 1, ncol = ncol(t_dep_base), 
                  dimnames = list(NULL, colnames(t_dep_base)))

# 遍历每个受试者的列,计算总分
for (col_name in colnames(t_dep_base)) {
  # 获取当前受试者的所有答案
  answers <- t_dep_base[, col_name]
  # 将答案映射为分数后求和(na.rm=TRUE处理可能的缺失值)
  total_score <- sum(score_map[answers], na.rm = TRUE)
  # 把总分赋值到结果矩阵的对应列
  scores1[, col_name] <- total_score
}

# 查看最终结果
scores1

更高效的向量化实现(推荐)

R中尽量避免循环,用向量化操作更快:

score_map <- c(
  "Not at all" = 0,
  "Several days" = 1,
  "More than half the days" = 2,
  "Nearly every day" = 3
)

# 直接将矩阵元素映射为分数,再按列求和,最后转为单行矩阵
scores1 <- matrix(colSums(score_map[t_dep_base], na.rm = TRUE), 
                  nrow = 1, dimnames = list(NULL, colnames(t_dep_base)))

scores1

运行后就能得到你期望的格式:每行对应总分,每列对应受试者。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:55:25