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

如何在R语言中合并同一数据框内列名相似的多列

R语言多选问卷数据处理方案

一、判断每行是否作答QUESTION1

你之前用unite拼接字符串的方式不符合需求,正确的做法是判断每行中任意一个QUESTION1相关列是否非NA,以此标记该用户是否已作答这个多选问题。用starts_with("QUESTION1")可以批量匹配列名,不用手动指定列位置,适合大型数据集:

library(tidyverse)

# 先把矩阵转成数据框,并将QUESTION1列转为整数类型(原数据是字符矩阵,处理更方便)
dat <- as.data.frame(dat) %>%
  mutate(across(starts_with("QUESTION1"), ~ as.integer(.)))

# 添加是否作答的标记列:TRUE=已作答,FALSE=未作答
dat <- dat %>%
  mutate(QUESTION1_answered = if_any(starts_with("QUESTION1"), ~ !is.na(.)))

运行后QUESTION1_answered列会直接标记每行是否完成该问题的作答,比拼接字符串更直观。

二、单个选项的分析方法

如果要分析每个选项的选择情况(比如选中率、不同群体的差异),可以用以下几种方式:

1. 统计各选项的整体选中率

假设1代表选中该选项,0代表未选,NA代表未作答:

# 计算每个选项的选中占比(百分比)
option_overview <- dat %>%
  summarise(across(starts_with("QUESTION1"), 
                   ~ sum(. == 1, na.rm = TRUE)/nrow(dat) * 100))

2. 按分组(如性别)统计选项差异

# 按性别分组,统计各选项的选中率
gender_option_stats <- dat %>%
  group_by(gender) %>%
  summarise(across(starts_with("QUESTION1"), 
                   ~ sum(. == 1, na.rm = TRUE)/n() * 100))

3. 转成长格式进行灵活分析

把宽格式的选项列转成长格式后,能更方便地做交叉分析、可视化:

# 转成长格式,只保留已作答的记录
dat_long <- dat %>%
  pivot_longer(starts_with("QUESTION1"),
               names_to = "option",
               values_to = "selected") %>%
  filter(!is.na(selected))

# 统计每个选项的选中/未选次数
option_counts <- dat_long %>%
  count(option, selected)

三、学习资源指引

  • 基础批量列处理:查看dplyr包的内置文档,输入?dplyr::across或vignette("dplyr"),里面详细讲解了across、if_any这类批量操作函数的用法。
  • 问卷数据专用工具:questionr包提供了很多问卷分析的实用函数(比如交叉表、频数统计),安装后输入?questionr查看文档。
  • 多选问题进阶分析:如果需要研究选项间的关联或做可视化,可以结合ggplot2包,用长格式数据绘制柱状图、热力图等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 05:10:09