如何随机排列列的子集?

3
我有一个数据框,想要随机打乱某些列的顺序。例如,以下是一个示例来表示我的情况:
V1  V2  V3  V4  V5  V6  V7  V8  V9  V10 V11 V12 V13 V14
ch1 12  A   9   10  6   5   6   3   4   6   5   7   5
ch2 13  T   7   10  1   7   3   3   3   1   7   8   6
ch3 14  T   5   7   7   2   6   8   1   1   8   1   5
ch4 15  G   8   9   2   7   9   7   7   3   10  10  4
ch5 16  T   8   2   8   2   4   7   1   8   10  3   2

我希望保持前三列不变(V1-V3),然后随机打乱其余列的顺序(V4-V14)。例如,

V1  V2  V3  V6  V5  V11 V4  V14 V10 V8  V7  V13 V12 V9
ch1 12  A   6   10  6   9   5   4   6   5   7   5   3
ch2 13  T   1   10  1   7   6   3   3   7   8   7   3
ch3 14  T   7   7   1   5   5   1   6   2   1   8   8
ch4 15  G   2   9   3   8   4   7   9   7   10  10  7
ch5 16  T   8   2   8   8   2   1   4   2   3   10  7

我找到了许多在列内重新排列行的方法,但没有找到任何关于打乱列顺序的方法。希望能得到帮助。

1个回答

5
您可以在不改变前三列的情况下,通过随机排序其他所有列来进行操作。
df[c(1:3, sample(4:ncol(df)))]

接下来我们看一下如何处理 mtcars 数据集,仅返回列名称。

replicate(7, names(mtcars[c(1:3, sample(4:ncol(mtcars)))]))
#       [,1]   [,2]   [,3]   [,4]   [,5]   [,6]   [,7]  
#  [1,] "mpg"  "mpg"  "mpg"  "mpg"  "mpg"  "mpg"  "mpg" 
#  [2,] "cyl"  "cyl"  "cyl"  "cyl"  "cyl"  "cyl"  "cyl" 
#  [3,] "disp" "disp" "disp" "disp" "disp" "disp" "disp"
#  [4,] "carb" "am"   "hp"   "qsec" "am"   "am"   "am"  
#  [5,] "wt"   "hp"   "drat" "carb" "carb" "wt"   "carb"
#  [6,] "hp"   "gear" "vs"   "drat" "qsec" "gear" "qsec"
#  [7,] "drat" "carb" "am"   "vs"   "wt"   "vs"   "hp"  
#  [8,] "qsec" "vs"   "carb" "wt"   "gear" "hp"   "gear"
#  [9,] "vs"   "drat" "gear" "am"   "drat" "drat" "drat"
# [10,] "am"   "wt"   "qsec" "gear" "vs"   "qsec" "wt"  
# [11,] "gear" "qsec" "wt"   "hp"   "hp"   "carb" "vs"  

我们可以看到,前三个列名(在这里显示为行)在每次运行时保持不变,而其他列则会变化。

不要紧,之前的版本回答已经很好了 :) - LyzandeR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接