根据 df 中的 3 级变量在行之间随机交替

问题描述 投票:0回答:1

我想要什么

我想根据“条件”列随机打乱 df 的行(44 行),该列有 3 个不同长度的级别。 1 级(中性)有 11 行,2 级(fem)有 11 行,3 级(填充物)有 22 行。

我想交替 df,以便第一行包含 Level 3(填充物)> Level 1(中性)> Level 3(填充物)> Level 2(fem),依此类推。

我的df结构

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…

三级变量的分布

 [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" 

我做了什么

我使用了这个解决方案(https://stackoverflow.com/a/32289673/17746590),但我收到错误消息“参数具有不同的行数”

我所期待的

我希望 df 有以下顺序

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

非常感谢您的帮助。


数据采用
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")
r row shuffle
1个回答
0
投票

下面是一个按

condition
级别对数据进行洗牌的函数,根据需要将所有级别交替放置在一起,并返回输入 data.frame 的行中的索引。然后使用索引对data.frame进行排序。

fun <- function(data) {
  x <- data$condition
  x <- factor(x, levels = c("filler", "neutral", "fem"))
  i <- ave(seq_along(x), x, FUN = sample)
  sp <- split(i, x)
  sp$filler2 <- sp$filler[(length(sp$neutral) + 1L):length(sp$filler)]
  sp$filler <- sp$filler[1:length(sp$neutral)]
  sp <- sp[c(1:2, 4, 3)]
  sp |> as.data.frame() |> t() |> c()
}

# made up data
df1 <- data.frame(
  id = sprintf("row %0d", seq_along(x)),
  condition = x
)

i <- fun(df1)
df1[i, ]
#>        id condition
#> 25 row 25    filler
#> 9   row 9   neutral
#> 32 row 32    filler
#> 16 row 16       fem
#> 24 row 24    filler
#> 2   row 2   neutral
#> 43 row 43    filler
#> 12 row 12       fem
#> 30 row 30    filler
#> 6   row 6   neutral
#> 31 row 31    filler
#> 22 row 22       fem
#> 40 row 40    filler
#> 11 row 11   neutral
#> 44 row 44    filler
#> 21 row 21       fem
#> 26 row 26    filler
#> 7   row 7   neutral
#> 38 row 38    filler
#> 13 row 13       fem
#> 37 row 37    filler
#> 4   row 4   neutral
#> 35 row 35    filler
#> 20 row 20       fem
#> 36 row 36    filler
#> 10 row 10   neutral
#> 28 row 28    filler
#> 18 row 18       fem
#> 33 row 33    filler
#> 1   row 1   neutral
#> 34 row 34    filler
#> 14 row 14       fem
#> 42 row 42    filler
#> 8   row 8   neutral
#> 27 row 27    filler
#> 19 row 19       fem
#> 29 row 29    filler
#> 5   row 5   neutral
#> 41 row 41    filler
#> 15 row 15       fem
#> 39 row 39    filler
#> 3   row 3   neutral
#> 23 row 23    filler
#> 17 row 17       fem

创建于 2023-08-30,使用 reprex v2.0.2

© www.soinside.com 2019 - 2024. All rights reserved.