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

R语言向量子集值遍历失败,求助作答次数统计实现

统计受访者作答次数的R实现方案

嗨,别担心基础问题!刚接触R的时候遇到这类数据处理需求太正常啦~针对你要统计每个受访者6个月内作答次数(评分>0即算作答)的需求,我给你几个简单易懂的实现方法,都是新手也能快速上手的:

方法1:用基础R的rowSums(最简洁)

假设你的数据集叫df,已经筛选出了6个月的评分变量(比如列名是month1到month6),直接用rowSums就能按行统计符合条件的数量,还能自动忽略未作答的NA值:

# 替换成你实际的列名或列位置
df$response_count <- rowSums(df[, c("month1", "month2", "month3", "month4", "month5", "month6")] > 0, na.rm = TRUE)
  • 解释:df[, 列范围] > 0会生成一个布尔矩阵(符合条件的为TRUE,否则FALSE),rowSums会把每行的TRUE(等价于1)加起来,na.rm = TRUE是为了忽略未作答的缺失值(NA),避免结果变成NA。

方法2:用apply函数(更灵活)

如果需要自定义更多逻辑,apply函数会更灵活,同样按行处理:

# 按行遍历选中的列,统计每个行里>0的元素数量
df$response_count <- apply(df[, month1:month6],  # 这里直接用列名范围选中所有月份评分列
                           MARGIN = 1,  # MARGIN=1代表按行操作,=2是按列
                           FUN = function(x) sum(x > 0, na.rm = TRUE))

方法3:用tidyverse工具链(适合数据清洗流水线)

如果你习惯用dplyr这类tidyverse包,可以用管道语法实现,代码可读性更高:

library(dplyr)

df <- df %>%
  rowwise() %>%  # 开启按行处理模式
  mutate(
    response_count = sum(c_across(month1:month6) > 0, na.rm = TRUE)
    # c_across(month1:month6) 选中所有月份的评分列
  ) %>%
  ungroup()  # 关闭按行模式,恢复常规数据框操作

小提醒:

如果你的未作答数据不是NA,而是直接填了0,那可以去掉na.rm = TRUE,因为0>0会返回FALSE,不会被统计进去;但如果未作答是缺失值NA,一定要加上这个参数哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:41:36