3

これらの初期値を持つ、ゲームごとのサッカー チーム情報 (MATCHID) のデータフレーム df があります。

 TEAMID Venue LEAGUEPOS MATCHID
 WHU     A         5       1
 COV     H        12       1
 EVE     H        15       2
 MNU     A         2       2
 ARS     A         3       3
 LEI     H         4       3

次のようになるように、ゲームごとに1行だけ作成したい

MATCHID HomeTeam AwayTeam HomePos AwayPos
   1       COV      WHU     12      5      etc.

そのため、いくつかの新しい列を作成し、他の列を削除して、重複した行を削除したいと考えています。

最初のステージの試行に問題があります

df$HomeTeam <- df$TEAMID[df$Venue == "H"]

これが生み出すように

 TEAMID Venue LEAGUEPOS MATCHID HomeTeam
   WHU     A         5       1      COV
   COV     H        12       1      EVE
   EVE     H        15       2      LEI
   MNU     A         2       2      STH
   ARS     A         3       3      TOT
   LEI     H         4       3      WIM

HomeTeam では、Venue = H の各レコードの連続した TEAMID を表示するだけです

4

2 に答える 2

5

reshapeこれは、base R の一部である関数を使用して簡単に実現できます。

# READ DATA
mydf = read.table(textConnection("
TEAMID Venue LEAGUEPOS MATCHID
 WHU     A         5       1
 COV     H        12       1
 EVE     H        15       2
 MNU     A         2       2
 ARS     A         3       3
 LEI     H         4       3"), 
 sep = "", header = T, colClasses = rep('character', 4))

# RESHAPE DATA
reshape(mydf, idvar = 'MATCHID', timevar = 'Venue', direction = 'wide')

ここに生成された出力があります

  MATCHID TEAMID.A LEAGUEPOS.A TEAMID.H LEAGUEPOS.H
1       1      WHU           5      COV          12
3       2      MNU           2      EVE          15
5       3      ARS           3      LEI           4

注: これを行う別の方法は、パッケージcastの andmelt関数を使用することです。reshape

require(reshape)
mydf_m = melt(mydf, id = c('MATCHID', 'Venue'))
cast(mydf_m, MATCHID ~ Venue + variable)
于 2011-08-03T17:24:30.313 に答える
1

reshape()ベースRでは、少し不格好な場合でも、必要なことを実行します。これがあなたのデータです:

con <- textConnection(" TEAMID Venue LEAGUEPOS MATCHID
 WHU     A         5       1
 COV     H        12       1
 EVE     H        15       2
 MNU     A         2       2
 ARS     A         3       3
 LEI     H         4       3
")
dat <- read.table(con, header = TRUE, stringsAsFactors = FALSE)
close(con)

これにより、要求された順序で列をreshape()取得し、列名を更新します。

newdat <- reshape(dat, direction = "wide", timevar = "Venue", idvar = "MATCHID")
## reorder
newdat <- newdat[, c(1,4,2,5,3)]
names(newdat) <- c("MatchID","HomeTeam","AwayTeam","HomePos","AwayPos")

これは私たちに与えます:

> newdat
  MatchID HomeTeam AwayTeam HomePos AwayPos
1       1      COV      WHU      12       5
3       2      EVE      MNU      15       2
5       3      LEI      ARS       4       3
于 2011-08-03T17:30:29.913 に答える