2015-02-03 3 views
0

У меня есть два data.frames равной длины. Один data.frame имеет переменные WEEK, Winner, Loser, homeScore, awayScore.Соответствие data.frames в R

'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 ... 
> 

У другой есть НЕДЕЛЯ, ИЗБРАННОЕ, ПРЕДПОЛАГАЕМОЕ, РАСПРОСТРАНЕНИЕ.

'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 иметь data.frame с недельным, Любимый, Underdog, homeScore, awayScore, Spread.

Я борюсь с этой совпадающей проблемой, потому что Фаворит не может быть Победителем из другого data.frame. Поэтому мне нужно пройти каждую неделю, чтобы соответствовать Фавору с Победителем или Проигравшим, и поместить распространение в правильный ряд. Я новичок в R, так что это должно быть легко сделать, но это выходит за рамки моих навыков. Спасибо за любую помощь

..ok Heres то, что 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 
+1

Думаю, вам нужно использовать '? Merge'. Сделайте вашу проблему воспроизводимой, чтобы получить лучшую помощь в SO. –

+0

Как @docendodiscimus говорит, 'merge' должен работать. Но из вашего описания неясно, каковы ваши идентификаторы, поэтому его трудно обеспечить точное решение. Я думаю, что вам не хватает идентификатора для участников игры, поэтому вы боретесь. –

+0

Вам необходимо предоставить воспроизводимый пример. 'str' нельзя воспроизвести очень легко. –

ответ

0

cbind() Вам нужно.

Если первый кадр данных А и второй является B, сначала выберите общую неделю для каждого:

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) 
+0

это хорошая идея, но она не работает. Команды «Любимые» и «Underdog» не находятся в том же порядке, что и команды «Победитель» и «Проигравшие», поэтому должно быть какое-то соответствие – usingRguy

+0

. Затем вам нужно сначала вычислить нужный заказ : right.order <- match (subset.A $ Winner, subset.B $ Favorite) subset.B <- subset.B [right.order,] , а затем вызвать cbind() – Onur

0

Я не знаю, понял ли я вы правильно, но я как бы спросил один и тот же вопрос несколько дней назад. Лучший ответ для меня:

merge(DFa, DFb, by.x='columnName_a_2Match', by.y='columnName_b_2Match') 
Смежные вопросы