在保持与另一个数据帧的顺序的同时随机播放数据帧

时间:2018-03-31 04:40:18

标签: r dataframe

我有2个数据框trainlabel。数据框train有784行和20K列。数据框label有1行和20K列。 i中的每个label列都对应i中的train列。 train类似于:

---->--- 20K Columns ---->
  0  0  0  0  ...  3
  1  0  .  .  ...  .   
  4  0
  9  7
  .  .
  .  .
  .  .
  1  4

因此,对于我属于{1,20K}的每个i列,label数据框中都有相应的标签,如下所示:

---->----20K columns----->
0 -1 3 4 5 8 0 -5 -9 1 2 ....

train中的第一列对应label中的第一列,train中的第二列对应label中的第二列,依此类推。

现在,我想要对train数据框进行随机播放。但如果我随机播放train,则label的订单将会丢失。有没有一种方法可以在保持train订单的同时将label数据框混洗?

1 个答案:

答案 0 :(得分:4)

随机排序一个排序向量,然后用它来排序两个对象。

shuffle <- sample(ncol(label))
label <- label[,shuffle]
train <- train[,shuffle]

mtcars的一个例子:

#create the label data frame
label <- data.frame(as.list(names(mtcars)), stringsAsFactors = FALSE)
label
#    X.mpg. X.cyl. X.disp. X.hp. X.drat. X.wt. X.qsec. X.vs. X.am. X.gear. X.carb.
# 1    mpg    cyl    disp    hp    drat    wt    qsec    vs    am    gear    carb

shuffle <- sample(ncol(label))
mtcars <- mtcars[,shuffle]
label <- label[,shuffle]
label
#    X.carb. X.wt. X.hp. X.cyl. X.mpg. X.gear. X.vs. X.am. X.drat. X.disp. X.qsec.
# 1    carb    wt    hp    cyl    mpg    gear    vs    am    drat    disp    qsec

head(mtcars)
#                   carb    wt  hp cyl  mpg gear vs am drat disp  qsec
# Mazda RX4            4 2.620 110   6 21.0    4  0  1 3.90  160 16.46
# Mazda RX4 Wag        4 2.875 110   6 21.0    4  0  1 3.90  160 17.02
# Datsun 710           1 2.320  93   4 22.8    4  1  1 3.85  108 18.61
# Hornet 4 Drive       1 3.215 110   6 21.4    3  1  0 3.08  258 19.44
# Hornet Sportabout    2 3.440 175   8 18.7    3  0  0 3.15  360 17.02
# Valiant              1 3.460 105   6 18.1    3  1  0 2.76  225 20.22

更直接的方法是rbind两个数据框,但我假设你将它们作为单独的对象出于某种原因。