【问题标题】:Randomise across columns for half a dataset对半个数据集的列进行随机化
【发布时间】:2019-09-02 18:34:01
【问题描述】:

我有一个 MMA 比赛数据集。

目前的结构是

Fighter 1, Fighter 2, Winner
x             y          x 
x             y          x
x             y          x
x             y          x
x             y          x

我的问题是战斗机 1 = 获胜者,因此我的模型将被训练为战斗机 1 总是获胜,这是一个问题。

我需要能够将 Fighter 1 和 Fighter 2 随机交换一半的数据集,以便让获胜者得到平等的代表。

理想情况下我会拥有这个

Fighter 1, Fighter 2, Winner
x            y         x
y            x         x
x            y         y
y            x         x
x            y         y

有没有办法在不弄乱行顺序的情况下随机化列??

【问题讨论】:

  • 您的数据中只显示了 1 行,它是如何转换为 5 行的?
  • 为什么预期输出中的第 3 行 (Fighter 1 = "x", Fighter 2 = "y", Winner = "y") 在第 5 行重复?重复的第 2 行和第 4 行也是如此。
  • 这只是我的数据的一个示例我有 4800 行战斗数据,我在那里编辑了问题
  • @KilianMurphy 嗯?这并没有真正回答这个问题。一行如何扩展为 5 行?为什么重复的行?在我看来,你应该看看expand.grid(或tidyr::crossing)。
  • x 和 y 只代表战斗机名称,我需要能够从 Fighter 1 和 Figther 2 列中随机交换名称以获得一半的数据集

标签: r neural-network row


【解决方案1】:

我还发现这段代码有效

matches_clean[, c("fighter1", "fighter2")] <- lapply(matches_clean[, c("fighter1", "fighter2")], as.character)

changeInd <- !!((match(matches_clean$fighter1, levels(as.factor(matches_clean$fighter1))) -
                  match(matches_clean$fighter2, levels(as.factor(matches_clean$fighter2)))) %% 2)


matches_clean[changeInd, c("fighter1", "fighter2")] <- matches_clean[changeInd, c("fighter2", "fighter1")]

【讨论】:

    【解决方案2】:

    我假设您的 xs 和 ys 是任意的,只是占位符。我将进一步假设您需要 Winner 列保持不变,您只需要获胜者不总是在第一列。

    样本数据:

    set.seed(42)
    x <- data.frame(
      F1 = sample(letters, size = 5),
      F2 = sample(LETTERS, size = 5),
      stringsAsFactors = FALSE
    )
    x$W <- x$F1
    x
    #   F1 F2 W
    # 1  x  N x
    # 2  z  S z
    # 3  g  D g
    # 4  t  P t
    # 5  o  W o
    

    随机选择一些要更改的行:

    (ind <- sample(nrow(x), size = ceiling(nrow(x)/2)))
    # [1] 3 5 4
    

    这意味着我们预计第 3-5 行会发生变化。

    现在随机变化:

    within(x, { tmp <- F1[ind]; F1[ind] = F2[ind]; F2[ind] = tmp; rm(tmp); })
    #   F1 F2 W
    # 1  x  N x
    # 2  z  S z
    # 3  D  g g
    # 4  P  t t
    # 5  W  o o
    

    第 1-2 行仍将 F1 显示为 Winner,第 3-5 行将 F2 显示为 Winner。

    【讨论】:

    • 如果这符合您的需求,请accept it;这样做不仅为回答者提供了一些积分,而且还为有类似问题的读者提供了一些关闭。尽管您只能接受一个答案,但您可以选择对您认为有帮助的人进行投票。 (如果仍有问题,您可能需要编辑您的问题并提供更多详细信息。)(在此过程中,请考虑接受您之前一些问题的答案。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 2021-02-19
    • 2014-06-25
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    相关资源
    最近更新 更多