1

私はこの構造から行きたいです:

game_id team pts
1 400597848 TOWS  53
2 400597848 COFC  50
3 400595519  ILL  49
4 400595519  WIS  68

これに:

game_id team1 pts1 team2 pts2
1 400597848 TOWS  53  COFC  50
3 400595519  ILL  49  WIS  68

サンプルデータは次のとおりです。

d <- structure(list(game_id = c(400597848L, 400597848L, 400595519L,
400595519L), team = c("TOWS", "COFC", "ILL", "WIS"), pts = c(53L,
50L, 49L, 68L)), .Names = c("game_id", "team", "pts"), row.names = c(NA,
4L), class = "data.frame")

tidyrこのチュートリアル を使用してみました: http://www.cookbook-r.com/Manipulating_data/Converting_data_between_wide_and_long_format/

ただし、試してみると:

 spread(d, team, pts)

すべてのチームの列が繰り返されますが、すべての組み合わせが必要なわけではありません。

4

1 に答える 1

4

1.データテーブル

複数の「value.var」列を取ることができるiedcastの devel バージョンから使用できます。からインストールできます。data.tablev1.9.5here

'data.frame' を 'data.table' に変換し ( setDT(d))、'game_id' でグループ化されたシーケンス列 ('ind') を作成しdcast、'value.var' を 'team' として指定して、変更されたデータセットで使用します。 、および「pts」。

dcast(setDT(d)[, ind:= 1:.N, by=game_id], game_id~ind, 
                   value.var=c('team', 'pts'))
#     game_id 1_team 2_team 1_pts 2_pts
#1: 400595519    ILL    WIS    49    68
#2: 400597848   TOWS   COFC    53    50

2.ベースR

別のオプションは、「ind」列を作成した後にreshapefromを使用することです。base R

 d1 <- transform(d, ind=ave(seq_along(game_id), game_id, FUN=seq_along))

 reshape(d1, idvar='game_id', timevar='ind', direction='wide')
 #    game_id team.1 pts.1 team.2 pts.2
 #1 400597848   TOWS    53   COFC    50
 #3 400595519    ILL    49    WIS    68
于 2015-03-22T16:37:45.803 に答える