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

如何为Stack Overflow生成含多被试的R大型数据框可复现数据?

生成多被试可复现数据的实用方法

针对你用head()只能导出单被试数据、导致模型无法运行的问题,这里有几种靠谱的替代方案:

1. 直接抽取多被试的样本数据

放弃用head(),改为按被试分组抽取,保证输出数据包含多个被试:

# 设置随机种子,确保每次抽取结果一致
set.seed(123)
# 随机挑选3个不同的被试ID
selected_subjects <- sample(unique(td_pref_all$subject), 3)
# 提取这3个被试的所有数据(或取前N行)
mini_data <- td_pref_all[td_pref_all$subject %in% selected_subjects, ]
# 如果想控制每个被试的行数,比如每个取15行
mini_data <- do.call(rbind, lapply(selected_subjects, function(sub) {
  head(td_pref_all[td_pref_all$subject == sub, ], 15)
}))
# 导出可复现数据
dput(mini_data)

2. 基于现有数据模拟多被试

如果不想公开真实数据,可以用现有单被试的数据做模板,生成模拟的多被试数据,保留原数据结构:

# 取单被试的前10行作为模板
template_data <- td_pref_all[td_pref_all$subject == "CC_86", ][1:10, ]
# 生成3个新被试ID
new_subs <- paste0("CC_", sample(100:200, 3))
# 复制模板并替换被试专属信息
simulated_data <- do.call(rbind, lapply(new_subs, function(sub) {
  temp <- template_data
  temp$subject <- sub
  temp$sub_num <- sample(1:50, 1)
  temp$age <- sample(18:30, 1)
  temp$rating <- sample(1:5, nrow(temp), replace = TRUE) # 模拟评分数据
  temp
}))
# 合并原模板和模拟数据,得到多被试示例
final_mini_data <- rbind(template_data, simulated_data)
dput(final_mini_data)

3. 用dplyr简化抽样(适合熟悉tidyverse的用户)

用dplyr的分组抽样功能,代码更简洁:

library(dplyr)
set.seed(123)
mini_data <- td_pref_all %>%
  group_by(subject) %>%
  slice_sample(n = 15) %>% # 每个被试抽15行
  ungroup() %>%
  filter(subject %in% sample(unique(subject), 3)) # 筛选3个被试
dput(mini_data)

4. 生成极简多被试结构示例

如果模型只需要"多被试"的结构验证,不需要大量观测,可以生成每个被试仅2-3行的极小数据集:

set.seed(456)
mini_structure <- td_pref_all %>%
  distinct(subject, .keep_all = TRUE) %>% # 每个被试取第一行
  slice_sample(n = 3) %>% # 选3个被试
  # 给第一个被试再加两行,保证每个被试有重复观测
  rbind(td_pref_all %>% filter(subject == first(mini_structure$subject)) %>% slice(2:3))
dput(mini_structure)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:41:06