【问题标题】:Matching data.frames in R在 R 中匹配 data.frames
【发布时间】:2015-02-03 16:58:33
【问题描述】:

我有两个长度相等的 data.frames。一个 data.frame 有变量 WEEK,Winner,Loser,homeScore,awayScore。

    'data.frame':   256 obs. of  5 variables:
 $ Week     : int  313 313 313 313 313 313 313 313 313 313 ...
 $ Winner   : Factor w/ 32 levels "ARI","ATL","BAL",..: 1 2 4 5 7 10 11 13 17 18 ...
 $ Loser    : Factor w/ 32 levels "ARI","ATL","BAL",..: 26 20 6 30 3 14 21 32 19 29 ...
 $ homeScore: Factor w/ 41 levels "","12","13","14",..: 7 25 12 9 12 20 23 6 21 22 ...
 $ awayScore: Factor w/ 32 levels "","0","10","11",..: 10 26 13 7 9 17 7 30 13 30 ...
> 

另一个有 WEEK、Favorite、Underdog、Spread。

'data.frame':   256 obs. of  4 variables:
 $ Week    : int  313 313 313 313 313 313 313 313 313 313 ...
 $ Favorite: chr  "SEA" "NO" "STL" "PIT" ...
 $ Underdog: Factor w/ 32 levels "ARI","ATL","BAL",..: 12 2 18 8 15 23 7 4 32 31 ...
 $ Spread  : chr  "-5" "-3" "-3" "-6" ...

我需要将这两个 data.frames 组合成一个带有 WEEK、Favorite、Underdog、homeScore、awayScore、Spread 的 data.frame。

我正在努力解决这个匹配问题,因为收藏夹可能不是其他 data.frame 中的获胜者。所以我需要每周将收藏夹与获胜者或失败者进行匹配,并将点差放在正确的位置排。我是 R 新手,所以这应该很容易做到,但它超出了我的技能。感谢您的帮助

..好的,data.frames 的样子

head(df1)
  Week Winner Loser homeScore awayScore
   313    ARI    SD        18        17
   313    ATL    NO        37        34
   313    BUF   CHI        23        20
   313    CAR    TB        20        14
   313    CIN   BAL        23        16
   313    DEN   IND        31        24
   313    DET   NYG        35        14
   313    HOU   WAS        17         6
   313    MIA    NE        33        20
   313    MIN   STL        34         6

head(df2)
   Week Favorite Underdog Spread
    313      SEA       GB     -5
    313       NO      ATL     -3
    313      STL      MIN     -3
    313      PIT      CLE     -6
    313      PHI      JAX    -10
    313      NYJ      OAK   -6.5
    313      BAL      CIN     -1
    313      CHI      BUF     -7
    313      HOU      WAS     -3
    313       KC      TEN     -3

【问题讨论】:

  • 我猜你需要使用?merge。让您的问题可重现,以便在 SO 上获得更好的帮助。
  • 正如@docendodiscimus 所说,merge 应该可以工作。但是从您的描述中不清楚您的标识符是什么,因此很难提供确切的解决方案。我认为您缺少游戏参与者的标识符,这就是您苦苦挣扎的原因。
  • 您需要提供一个可重现的示例。 str 不容易被复制。
  • 现在添加您想要的输出效果。

标签: r dataframe matching


【解决方案1】:

你需要cbind()

如果您的第一个数据框是 A,第二个是 B,请先为每个数据框选择共同的 WEEK:

subset.A <- subset(A, Week == 313)
subset.B <- subset(B, Week == 313)

然后将它们组合起来:

resultDF <- cbind(A$Week, B$Favorite, B$Underdog, A$homeScore, A$awayScore, B$Spread)

【讨论】:

  • 这是一个好主意,但不起作用.. 最喜欢和失败的球队与赢家和输家的顺序不同,所以必须有一些匹配
  • 那么你需要先计算出想要的顺序:right.order
【解决方案2】:

我不知道我是否理解正确,但几天前我问了同样的问题。对我来说最好的答案是:

 merge(DFa, DFb, by.x='columnName_a_2Match', by.y='columnName_b_2Match')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 2013-02-14
    • 1970-01-01
    • 2022-01-11
    • 2021-05-14
    相关资源
    最近更新 更多