我想要什么
我想根据“条件”列随机打乱 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")
下面是一个按
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