为每一行打乱(随机化)数据

Shuffle (randomize) data for each row

我正在尝试 reorder/shuffle 数据框每一行的值,但不知道如何执行此操作。请看下面的例子:

df1 #original data
#  X1 X2 X3 X4 X5
#1  1  2  3  4  5
#2  6  7  8  9 10
#3 11 12 13 14 15

生成的数据框应如下所示(无模式)。

df2 #each row is randomly shuffled
#  X1 X2 X3 X4 X5
#1  2  4  1  5  3
#2  6 10  9  7  8
#3 15 13 11 14 12

我试过使用 sample() 示例 here 但它不是我想要的。 "shuffle column-wise" 与我正在尝试做的最相似,但我想对每一行而不是整列执行 sample()。

我们可以使用data.table

library(data.table)
setDT(df1)[, as.list(sample(unlist(.SD))), .(rn = 1:nrow(df1))][, rn := NULL][]

注意: post 中提到的 OP 是 rowwise 采样。

base R解决方案:

df1[] <- t(apply(df1, 1, sample))