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

如何按条件分组随机抽样Likert响应数据并限制重复抽样?

解决方案

核心思路

要满足「每种语音的每类问题保留50条响应,且同一参与者在同一语音+问题类型中仅出现一次」的要求,需分两步处理:先确保每个(参与者-语音-问题类型)组合唯一,再按「语音+问题类型」维度分组抽样。

具体代码实现

假设你的数据集名为df,关键列包括:participant_id(参与者ID)、voice_id(语音ID)、question_type(问题类型)、response(响应内容)。

  1. 去重处理:剔除同一参与者在同一语音+问题类型下的重复记录(若存在),确保每个组合最多一条有效响应:
library(dplyr)

# 去重,保留每个(参与者-语音-问题类型)的唯一记录
df_clean <- df %>%
  distinct(participant_id, voice_id, question_type, .keep_all = TRUE)
  1. 分组随机抽样:按「语音ID+问题类型」分组,每组抽取50条;若某组有效记录不足50条,直接保留全部(避免报错):
# 分组抽样,每组最多50条
sampled_df <- df_clean %>%
  group_by(voice_id, question_type) %>%
  slice_sample(n = min(n(), 50), replace = FALSE) %>%
  ungroup()

关键说明

  • distinct()从根源上避免了同一参与者在同一语音+问题类型中被多次抽样的问题,完全符合约束条件。
  • 若你的dplyr版本低于1.0.0,可替换为旧版sample_n()函数,但组内记录数不足50时会触发警告:
sampled_df <- df_clean %>%
  group_by(voice_id, question_type) %>%
  sample_n(size = min(n(), 50), replace = FALSE) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:26:16