簡體   English   中英

在R中匹配data.frames

[英]Matching data.frames in R

我有兩個相等長度的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的新手,所以這應該很容易實現,但是超出我的能力范圍。 謝謝你的幫助

..ok這是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

您需要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)

我不知道我是否正確理解了您,但是幾天前我也問了同樣的問題。 對我來說最好的答案是:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM