【问题标题】:Shuffle a data frame while maintaining order with another data frame打乱数据帧,同时保持与另一个数据帧的顺序
【发布时间】:2018-09-10 01:53:09
【问题描述】:

我有 2 个数据框 trainlabel。数据框train 有 784 行和 20K 列。数据框label 有 1 行和 20K 列。 label 中的每个 i 列对应于 train 中的 i 列。 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 数据框。但是如果我洗牌trainlabel 的订单就会丢失。有没有一种方法可以让我在使用label 保持顺序的同时对train 数据帧进行洗牌?

【问题讨论】:

  • 你洗牌怎么样
  • 我很好奇您为什么使用 1 行 20k 列的数据框。 label 作为向量或数组更有意义吗?我确信这种结构可能有充分的理由,但我现在无法自己想出一个。
  • @DanHall 框架label 是从具有 20K 列和 785 行的 CSV 创建的。 label 框架包含所有列的最后一行中的值。因此,一行和 20K 列。所以每个training 列都有一个对应的label 列。
  • @Jatt 下面的方法对你有用吗?
  • @DanHall 是的。聪明的方法!

标签: r dataframe


【解决方案1】:

打乱一个排序向量,并使用它对两个对象进行排序。

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 这两个数据框,但我假设您将它们作为单独的对象是有原因的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-08
    • 2021-05-12
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 2022-01-22
    • 2016-01-31
    • 1970-01-01
    相关资源
    最近更新 更多