R 如何按列排列数据帧,但不依赖于行?

R 如何按列排列数据帧,但不依赖于行?,r,dataframe,permutation,R,Dataframe,Permutation,在这个答案中:它展示了如何按行和列洗牌数据帧。我感兴趣的是从列的角度来分析。从原始数据帧 > df1 a b c 1 1 1 0 2 1 0 0 3 0 1 0 4 0 0 0 按列洗牌 > df3=df1[,sample(ncol(df1))] > df3 c a b 1 0 1 1 2 0 1 0 3 0 0 1 4 0 0 0 但是,我希望将其列上的每一行独立于其他行进行洗牌,而不是洗牌整个列,这样您可以得到如下结果 >df4 c a b 1 0 1

在这个答案中:它展示了如何按行和列洗牌数据帧。我感兴趣的是从列的角度来分析。从原始数据帧

> df1
  a b c
1 1 1 0
2 1 0 0
3 0 1 0
4 0 0 0
按列洗牌

> df3=df1[,sample(ncol(df1))]
> df3
  c a b
1 0 1 1
2 0 1 0
3 0 0 1
4 0 0 0
但是,我希望将其列上的每一行独立于其他行进行洗牌,而不是洗牌整个列,这样您可以得到如下结果

>df4
  c a b
1 0 1 1
2 1 0 0
3 1 0 0
4 0 0 0
现在我通过在每一行上循环,洗牌该行,并将其放入一个数据帧来实现这一点。有没有一种简单的方法可以做到这一点?

类似于:

t(apply(df1, 1, function(x) { sample(x, length(x)) } ))

这将以矩阵形式给出结果。如果你有因子,数字和字符的混合等,请注意这将强制所有内容都使用字符。

也许你想看看
?apply
我认为
t(apply(df1,1,sample))
应该这样做。关于你的编辑,即使他们一开始就混合了列类型,这将是唯一可能的方法,除非他们想在列类型中混洗,不是吗?@AnandaMahto thatnks!你完全正确,如果他在列之间切换,那么他无论如何都会混合类,但是我想,如果OP只是有一些因素,例如,我想让他们知道强制到一个新类。这很有效,谢谢!但是,它确实删除了列名。有没有办法保存它们,或者我应该在采样后重新添加它们?很高兴这有帮助。我认为最好是事后再加上