首页 > 解决方案 > 如何通过对 R 中的所有列和选择列求和来计算问卷总分和子分数?

问题描述

我是 R 的新手,我遇到了一个小问题。我希望你们中的一些人可以帮助我!

我有一个 data.frame,包括单个问卷的答案。

行表示参与者。
第一列表示参与者 ID。
以下列包括问卷中每个项目的答案(item.1最多item.20)。

我需要创建两个新向量:

  1. total.score <- 每个参与者所有 20 个值的总和
  2. subscore <- 一些项目的总和

我想使用一个函数,比如sum(A:T)Excel 中的 a 。

回顾一下,我使用的是 R 而不是其他软件。

我已经通过将每个向量与符号相加来做到这一点+

(数据$item.1 + data$item.2 + data$item.3 等等...)

但这是一种缓慢的方法。

每个项目的答案从 0 到 3 不等,所以我预计总分在 0 到 60 之间。

先感谢您!!

标签: rsum

解决方案


让我们以来自全国调查的数据为例

如果您将 .csv 文件下载到您的工作目录

data <- read.csv("2016-SpanishSurveyBreastfeedingKnowledge-AELAMA.csv", sep = "\t")

项目名称是p01, p02, p03... 假设您想要前五个问题的小计(从 p01 到 p05)

您可以为组命名:

FirstFive <- c("p01", "p02", "p03", "p04", "p05")

我认为这是值得的,因为您可能希望在该组中执行更多任务(分析、添加或删除组中的问题......),并且因为它可以帮助您提供有意义的名称(例如“知识”, “态度”...)

然后创建小计变量:

data$subtotal1 <- rowSums(data[ , FirstFive])

您可以检查新变量是否为总和

head(data[ , c(FirstFive, "subtotal2")])

(注意FirstFive没有引用,因为是data外的对象,但是subtotal2被引用了,因为是data中的变量名)

您可以计算更多小计并使用它们来计算全局分数


如果您知道这些变量是第 20 到 24 列,则可以节省一些击键:

names(data)[20:24]

然后将它们总结为

rowSums(data[ , c(20:24)])

我想这是你要求的,但我会避免这样做,因为更容易出错,很难被发现


推荐阅读