2016-03-25 4 views
1

私は、マージしたいパネルデータを2セット持っています。問題は、各時間間隔ごとに、2つのデータセットをリンクする変数が、第2のデータフレームよりも第1のデータフレームでより頻繁に現れることである。私の目的は、同じ時間間隔で前記行を複数回コピーする必要がある場合でも、第2データセットの各行を第1データセットの対応する行に追加することです。具体的には、NBAのバスケットボールデータを使用しています。最初のデータセットはPlayerとDateのパネルで、2番目のデータセットはTeam(Tm)とDateの1つです。したがって、各チームエントリーは、その日にプレーしたそのチームの各プレイヤーに対して1回、日付ごとに複数回コピーする必要があります。私はこれをExcelで簡単に行うことができますが、データフレームが大きすぎます。均等ではないパネルデータフレームの結合R

結果は52の変数の0回の観測値です。バインド、マッチ、さまざまなバージョンのマージを試してみましたが、私が考えることができるすべてを探しました。しかし、この問題を具体的に取り上げるものはありません。免責事項、私はここに私のコードは私の道ブロックまでであるR.

に非常に新しいです:

HGwd = "~/Documents/Fantasy/Basketball" 
library(plm) 
library(mice) 
library(VIM) 
library(nnet) 
library(tseries) 
library(foreign) 
library(ggplot2) 
library(truncreg) 
library(boot) 
Pdata = read.csv("2015-16PlayerData.csv", header = T) 
attach(Pdata) 
Pdata$Age = as.numeric(as.character(Pdata$Age)) 
Pdata$Date = as.Date(Pdata$Date, '%m/%e/%Y') 
names(Pdata)[8] = "OppTm" 
Pdata$GS = as.factor(as.character(Pdata$GS)) 
Pdata$MP = as.numeric(as.character(Pdata$MP)) 
Pdata$FG = as.numeric(as.character(Pdata$FG)) 
Pdata$FGA = as.numeric(as.character(Pdata$FGA)) 
Pdata$X2P = as.numeric(as.character(Pdata$X2P)) 
Pdata$X2PA = as.numeric(as.character(Pdata$X2PA)) 
Pdata$X3P = as.numeric(as.character(Pdata$X3P)) 
Pdata$X3PA = as.numeric(as.character(Pdata$X3PA)) 
Pdata$FT = as.numeric(as.character(Pdata$FT)) 
Pdata$FTA = as.numeric(as.character(Pdata$FTA)) 
Pdata$ORB = as.numeric(as.character(Pdata$ORB)) 
Pdata$DRB = as.numeric(as.character(Pdata$DRB)) 
Pdata$TRB = as.numeric(as.character(Pdata$TRB)) 
Pdata$AST = as.numeric(as.character(Pdata$AST)) 
Pdata$STL = as.numeric(as.character(Pdata$STL)) 
Pdata$BLK = as.numeric(as.character(Pdata$BLK)) 
Pdata$TOV = as.numeric(as.character(Pdata$TOV)) 
Pdata$PF = as.numeric(as.character(Pdata$PF)) 
Pdata$PTS = as.numeric(as.character(Pdata$PTS)) 
PdataPD = plm.data(Pdata, index = c("Player", "Date")) 
attach(PdataPD) 
Tdata = read.csv("2015-16TeamData.csv", header = T) 
attach(Tdata) 
Tdata$Date = as.Date(Tdata$Date, '%m/%e/%Y') 
names(Tdata)[3] = "OppTm" 
Tdata$MP = as.numeric(as.character(Tdata$MP)) 
Tdata$FG = as.numeric(as.character(Tdata$FG)) 
Tdata$FGA = as.numeric(as.character(Tdata$FGA)) 
Tdata$X2P = as.numeric(as.character(Tdata$X2P)) 
Tdata$X2PA = as.numeric(as.character(Tdata$X2PA)) 
Tdata$X3P = as.numeric(as.character(Tdata$X3P)) 
Tdata$X3PA = as.numeric(as.character(Tdata$X3PA)) 
Tdata$FT = as.numeric(as.character(Tdata$FT)) 
Tdata$FTA = as.numeric(as.character(Tdata$FTA)) 
Tdata$PTS = as.numeric(as.character(Tdata$PTS)) 
Tdata$Opp.FG = as.numeric(as.character(Tdata$Opp.FG)) 
Tdata$Opp.FGA = as.numeric(as.character(Tdata$Opp.FGA)) 
Tdata$Opp.2P = as.numeric(as.character(Tdata$Opp.2P)) 
Tdata$Opp.2PA = as.numeric(as.character(Tdata$Opp.2PA)) 
Tdata$Opp.3P = as.numeric(as.character(Tdata$Opp.3P)) 
Tdata$Opp.3PA = as.numeric(as.character(Tdata$Opp.3PA)) 
Tdata$Opp.FT = as.numeric(as.character(Tdata$Opp.FT)) 
Tdata$Opp.FTA = as.numeric(as.character(Tdata$Opp.FTA)) 
Tdata$Opp.PTS = as.numeric(as.character(Tdata$Opp.PTS)) 
TdataPD = plm.data(Tdata, index = c("OppTm", "Date")) 
attach(TdataPD) 
PD = merge(PdataPD, TdataPD, by = "OppTm", all.x = TRUE) 
attach(PD) 

がこれを行う方法上の任意の助けをいただければ幸いです!

EDIT

私は少し昨夜からそれを微調整しましたが、まだ何もトリックを行うように思いません。上記の私が現在使っているコードの更新されたコードを見てください。

Player  Date Rk Pos Tm X..H OppTm W.L GS MP FG FGA FG. X2P 
22408 Aaron Brooks 2015-10-27 817 G CHI  CLE W 0 16 3 9 0.333 3 
22144 Aaron Brooks 2015-10-28 553 G CHI @ BRK W 0 16 5 9 0.556 3 
21987 Aaron Brooks 2015-10-30 396 G CHI @ DET L 0 18 2 6 0.333 1 
21456 Aaron Brooks 2015-11-01 4687 G CHI  ORL W 0 16 3 11 0.273 3 
21152 Aaron Brooks 2015-11-03 4383 G CHI @ CHO L 0 17 5 8 0.625 1 
20805 Aaron Brooks 2015-11-05 4036 G CHI  OKC W 0 13 4 8 0.500 3 
     X2PA X2P. X3P X3PA X3P. FT FTA FT. ORB DRB TRB AST STL BLK TOV PF PTS GmSc 
22408 8 0.375 0 1 0.000 0 0 NA 0 2 2 0 0 0 2 1 6 -0.9 
22144 3 1.000 2 6 0.333 0 0 NA 0 1 1 3 1 0 1 4 12 8.5 
21987 2 0.500 1 4 0.250 0 0 NA 0 4 4 4 0 0 0 1 5 5.2 
21456 6 0.500 0 5 0.000 0 0 NA 2 1 3 1 1 1 1 4 6 1.0 
21152 3 0.333 4 5 0.800 0 0 NA 0 0 0 4 1 0 0 4 14 12.6 
20805 5 0.600 1 3 0.333 0 0 NA 1 1 2 0 0 0 0 1 9 5.6 
     FPTS H.A 
22408 7.50 H 
22144 20.25 A 
21987 16.50 A 
21456 14.75 H 
21152 24.00 A 
20805 12.00 H 

とヘッド用(TdataPD):ここで

は、ヘッドの出力(PdataPD)である

OppTm  Date Rk X Opp Result MP FG FGA FG. X2P X2PA X2P. X3P X3PA 
2105 ATL 2015-10-27 71 DET L 94-106 240 37 82 0.451 29 55 0.527 8 27 
2075 ATL 2015-10-29 41 @ NYK W 112-101 240 42 83 0.506 32 59 0.542 10 24 
2047 ATL 2015-10-30 13 CHO W 97-94 240 36 83 0.434 28 60 0.467 8 23 
2025 ATL 2015-11-01 437 @ CHO W 94-92 240 37 88 0.420 30 59 0.508 7 29 
2001 ATL 2015-11-03 413 @ MIA W 98-92 240 37 90 0.411 30 69 0.435 7 21 
1973 ATL 2015-11-04 385 BRK W 101-87 240 37 76 0.487 29 54 0.537 8 22 
     X3P. FT FTA FT. PTS Opp.FG Opp.FGA Opp.FG. Opp.2P Opp.2PA Opp.2P. Opp.3P 
2105 0.296 12 15 0.800 94  37  96 0.385  25  67 0.373  12 
2075 0.417 18 26 0.692 112  38  93 0.409  32  64 0.500  6 
2047 0.348 17 22 0.773 97  36  88 0.409  24  58 0.414  12 
2025 0.241 13 14 0.929 94  32  86 0.372  18  49 0.367  14 
2001 0.333 17 22 0.773 98  38  86 0.442  33  58 0.569  5 
1973 0.364 19 24 0.792 101  36  83 0.434  31  62 0.500  5 
    Opp.3PA Opp.3P. Opp.FT Opp.FTA Opp.FT. Opp.PTS 
2105  29 0.414  20  26 0.769  106 
2075  29 0.207  19  21 0.905  101 
2047  30 0.400  10  13 0.769  94 
2025  37 0.378  14  15 0.933  92 
2001  28 0.179  11  16 0.688  92 
1973  21 0.238  10  13 0.769  87 

dputからの出力を切り捨てる方法(ヘッド(___)がある場合)、私はそれに精通していません。余分な文字を消去するだけでは、変数全体がデータセットから削除されるようです。

+2

での機能に参加。 'dput(head(PdataPD))'と 'dput(head(TdataPD))の出力を含めるようにあなたの質問を変更してください。 – SymbolixAU

+1

そして、あなたは' 'on。私はあなたが '' PD < - merge(PdataPD、tdataPD、by = "Date"、all.x = TRUE)の後にいると思う。 – SymbolixAU

+0

これは出力結果を表示させない。ただし、PD = merge(PdataPD、TdataPD、by = "Date"、all.x = TRUE)が返されました: 警告メッセージ: 1:.HTMLsearch(クエリ):認識されない検索フィールド:タイトル: 2:HTML検索(キーワード):キーワード: 3:.HTMLsearch(クエリ):認識できない検索フィールド:エイリアス 各プレイヤーを所定の日付ごとに複数回コピーすることで、各ゲームを各プレイヤーに複数回コピーするのではなく、 –

答えて

1

あなたのデータ(またはそのサブセット)を投稿した場合や、マージしようとしている方法の詳細をもう少し詳しくお伝えしますが、もしあなたが何をしようとしているのか分かっていれば、特定の日付の各プレイヤーの個別の統計値と、その日付のプレイヤーのチームの統計値が表示されます。このケースでは、プレイヤーのチームを識別プレーヤーテーブルのteam列を持っている必要があり、その後、マージでby=属性を設定することにより、複合キー日付とチームに2つのテーブルを結合:

merge(PData, TData, by=c("Date", "Team")) 

事実データフレームの長さが異なっていても問題はありません。これはまさに結合/マージ操作の対象です。マージする代替のために

()、あなたはdplyrパッケージをチェックアウトする可能性があるそれはあなたの実際のデータを投稿した場合に支援するために他の人のために簡単ですhttps://cran.r-project.org/web/packages/dplyr/vignettes/two-table.html

+0

私は実際にその日の彼の相手のチームの統計を欲しがっていますが、それ以外の場合は、それは私がやろうとしていることです。あなたはそれを解決しました!私は共通変数を作成しなければなりませんでしたが、by()関数のDateと一緒にそれを組み込んだのはトリックでした!どうもありがとうございます! –

+0

私はこれでどこに行くのかわからない場合は、私の次の質問はどのように変数を遅らせるのですか? lag()関数を使うたびに、コピーするだけです。 –

+0

これは別の質問ですので、おそらくSOに新しい投稿を作成するべきですが、明示的に再割り当てしない限り、lag()関数は元の変数を上書きしません。変数 'var = c(1,2,3)'を持ち、 'var'をそれ自身の遅れたバージョンにしたい場合、' var < - lag(var) ' – Nat

関連する問題