为每一行打乱(随机化)数据
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))
我正在尝试 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))