如何在 R 中打乱数据帧条目

MK *_*uda 2 random r shuffle sample dataframe

我有一个尺寸为 24,523x3,468 的数据框,我想打乱该数据框的条目。例如,我有一个简单的数据框

df <- data.frame(c1=c(1, 1.5, 2, 4), c2=c(1.1, 1.6, 3, 3.2), c3=c(2.1, 2.4, 1.4, 1.7)) 
df_shuffled = transform(df, c2 = sample(c2))
Run Code Online (Sandbox Code Playgroud)

它适用于一列,但我想洗牌所有列或所有行。我试过

col = colnames(df)
for (i in 1:ncol(df)){
  df2 = transform(df, col[i] = sample(col[i]))
}
df2
Run Code Online (Sandbox Code Playgroud)

它会产生这样的错误

错误

我也尝试过这个来洗牌,但它只洗牌行和列

df_shuf = df[sample(rownames(df), nrow(df)), sample(colnames(df), ncol(df))]
df_shuf
Run Code Online (Sandbox Code Playgroud)

随机播放

如何使用 I 的循环按行和列对数据帧 df 的条目进行洗牌?

B. *_*ang 5

解决您的问题的一种方法:

df[] = lapply(df, sample)
Run Code Online (Sandbox Code Playgroud)

  • 解释一下那里的评论,*“简而言之,`df &lt;-`创建一个新对象,`df[] &lt;-`修改**现有对象的内容**”*。在这种情况下,“df &lt;-”成为一个包含所需值的列表,但它不是一个框架;`df[] &lt;-` 替换了内容,但保留了它是一个 `data.frame` 的事实。它也可以很容易地是“df &lt;- data.frame(lapply(df,sample))”,但答案更简洁(并且操作更少)。 (3认同)