2016-09-02 127 views
2

我想重新排序/洗牌數據幀的每一行的值,但無法弄清楚如何做到這一點。請參閱下面的示例:爲每一行隨機(隨機)數據

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 

我使用樣本()例如here嘗試,但它不是我想要什麼比較。 「洗牌列明智」是最類似於我想要做的,但我想執行樣品()爲每個單獨的行,而不是整個列。

回答

7

我們可以使用data.table

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

注:,它是橫行採樣帖子中提到的OP。

而且base R解決方案:

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