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

基于3水平condition列重排44行df:交替排序需求及报错解决

数据框重排需求与解决方案

问题描述

有一个44行的数据框df,condition列包含3个水平:

  • neutral:11行
  • fem:11行
  • filler:22行

需要完成两步操作:

  1. 随机打乱每个水平内的行
  2. 按filler→neutral→filler→fem的交替顺序重排整个数据框

数据框结构

Rows: 44
Columns: 11
$ display              <chr> "experimental_eye_tracking", "experimental_eye_tracking", "experimental_eye_tracking"…
$ ANSWER               <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ TopLeft              <chr> "1_row-1-column-1.png", "2_row-1-column-1.png", "3_row-1-column-1.png", "4_row-1-colu…
$ BottomLeft           <chr> "1_row-1-column-2.png", "2_row-1-column-2.png", "3_row-1-column-2.png", "4_row-1-colu…
$ TopRight             <chr> "1_row-2-column-1.png", "2_row-2-column-1.png", "3_row-2-column-1.png", "4_row-2-colu…
$ BottomRight          <chr> "1_row-2-column-2.png", "2_row-2-column-2.png", "3_row-2-column-2.png", "4_row-2-colu…
$ audio                <chr> "بعد الصيف تم انتخاب الرئيسة.mp3", "بعد الصباح تم إخراج الأم.mp3", "في المساء تم تنوي…
$ item_type            <chr> "experimental", "experimental", "experimental", "experimental", "experimental", "expe…
$ condition            <chr> "neutral", "neutral", "neutral", "neutral", "neutral", "neutral", "neutral", "neutral…
$ comprehension_Q      <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…

condition列分布

[1] "neutral" "neutral" "neutral" "neutral" "neutral" "neutral" "neutral" "neutral" "neutral" "neutral" "neutral"
[12] "fem"     "fem"     "fem"     "fem"     "fem"     "fem"     "fem"     "fem"     "fem"     "fem"     "fem"    
[23] "filler"  "filler"  "filler"  "filler"  "filler"  "filler"  "filler"  "filler"  "filler"  "filler"  "filler" 
[34] "filler"  "filler"  "filler"  "filler"  "filler"  "filler"  "filler"  "filler"  "filler"  "filler"  "filler" 

condition列dput数据

c("neutral", "neutral", "neutral", "neutral", "neutral", "neutral", 
"neutral", "neutral", "neutral", "neutral", "neutral", "fem", 
"fem", "fem", "fem", "fem", "fem", "fem", "fem", "fem", "fem", 
"fem", "filler", "filler", "filler", "filler", "filler", "filler", 
"filler", "filler", "filler", "filler", "filler", "filler", "filler", 
"filler", "filler", "filler", "filler", "filler", "filler", "filler", 
"filler", "filler")

已尝试操作

使用相关方案时出现错误:Arguments have differing numbers of rows

期望结果

最终数据框按以下顺序排列(示例):

Rows: 10
Columns: 2
$ condition <chr> "filler", "neutral", "filler", "fem", "filler", "neutral", "filler", "fem", "filler", "neutral"
$ trial     <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

可行解决方案

通过dplyr和tibble包实现,步骤如下:

  1. 加载所需包:
library(dplyr)
library(tibble)
  1. 拆分数据框并打乱各水平内的行:
# 拆分并随机打乱每个组
neutral_shuffled <- df %>% filter(condition == "neutral") %>% sample_frac(1)
fem_shuffled <- df %>% filter(condition == "fem") %>% sample_frac(1)
filler_shuffled <- df %>% filter(condition == "filler") %>% sample_frac(1)

# 将filler拆分为两个等长组(各11行)
filler1 <- filler_shuffled[1:11, ]
filler2 <- filler_shuffled[12:22, ]
  1. 按指定顺序拼接数据框:
# 创建交替顺序的索引映射
order_df <- tibble(
  group = rep(c("filler1", "neutral", "filler2", "fem"), each = 11),
  idx = rep(1:11, 4)
)

# 按索引拼接并整理最终数据框
final_df <- order_df %>%
  group_by(group) %>%
  mutate(row = list(
    if (group == "filler1") filler1[idx, ]
    else if (group == "neutral") neutral_shuffled[idx, ]
    else if (group == "filler2") filler2[idx, ]
    else fem_shuffled[idx, ]
  )) %>%
  unnest(row) %>%
  ungroup() %>%
  select(-group, -idx)
  1. 验证结果:
# 查看前10行的condition列顺序
head(final_df$condition, 10)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:25:33