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

如何用tidyr::expand_grid()复现指定结构的Data数据框?

用tidyr::expand_grid()复现指定结构的数据框

问题分析

你原代码存在以下问题:

  • 变量名拼写错误:oder应为order
  • 未建立order、time、task的对应逻辑,导致生成了不符合需求的无效组合(比如s-c顺序下time=1出现complex任务)
  • 未处理DV的两个水平(ac/bc),也没生成每个time下恒定的mot值

解决方案代码

library(tidyr)
library(dplyr)

# 1. 定义class、id、order的固定对应关系
id_info <- tibble(
  class = rep(1:2, each = 2),
  id = 1:4,
  order = rep(c("s-c", "c-s"), 2)
)

# 2. 建立order、time、task的映射规则
order_task_map <- tibble(
  order = rep(c("s-c", "c-s"), each = 2),
  time = rep(1:2, 2),
  task = c("simple", "complex", "complex", "simple")
)

# 3. 生成每个id-time组合的mot值(同一time下mot恒定)
mot_data <- id_info %>%
  crossing(time = 1:2) %>%
  mutate(mot = round(runif(n(), 1, 4), 1))

# 4. 组合所有变量生成目标数据框
Data <- id_info %>%
  left_join(order_task_map, by = "order") %>%
  left_join(mot_data, by = c("class", "id", "order", "time")) %>%
  crossing(DV = c("ac", "bc")) %>%
  select(class, id, order, time, DV, task, mot) %>%
  arrange(class, id, time, DV)

# 查看结果
print(Data)

代码说明

  • id_info:明确class、id、order的绑定关系,避免生成无意义的组合
  • order_task_map:严格定义不同任务顺序下,时间点对应的任务类型,保证逻辑匹配
  • mot_data:为每个id的每个时间点生成唯一随机值,确保同一时间下mot保持恒定
  • 最后通过left_join关联各部分数据,crossing(DV = c("ac", "bc"))生成每个任务下的两个DV水平,再调整列顺序和排序得到目标结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:55:15