2つのデータフレームに対して、Rのマージ関数を使用すると少し問題があります。私は、互いに共通の列とデータを持つ2つの大きなデータフレームを持っており、それを私がそれらをマージするために使用しています。例えば、データフレーム2に列「Instrument」、「RecordDate」、「HourMinuteSecond」、「MilliSecond」、...(および他のいくつかの追加の列)がある間に、 (データフレーム2と比較していくつかの他の異なる列)を使用して、「RecordDate」、「HourMinuteSecond」、「MilliSecond」、私は今、次のようにマージ関数を使用します:Rで2つのデータフレームをマージする(データフレームが適切にマージされていない)
DataFrame3 <- merge(DataFrame2, DataFrame1, by=c("Instrument", "RecordDate","HourMinuteSecond","MilliSecond"))
これは私に新しいデータフレームを与えます。今、私が抱えている問題は、データフレーム間の一部がまったく一致していないことです。たとえば、正しく一致しなかったデータのセクションが見つかりました。
> DataFrame1[120486,]
Instrument RecordDate HourMinuteSecond MilliSecond
120486 DTE 6/4/2012 16:10:27 42
> DataFrame2[65,]
Instrument RecordDate HourMinuteSecond MilliSecond
65 DTE 6/4/2012 16:10:27 42
(ただし、他の列はありますが、省略しています) ここでは、これらのセクションがベクトルであるかのように比較します。まず、私は各ベクトルの各値を比較するために、同一の機能を使用しており、これは以下の与える:コラム「楽器」と「HourMintuteSecond」の値が異なっているかのように表示される同一の機能から
> identical(DataFrame1[120486,1] ,DataFrame2[65,1])
[1] FALSE
> identical(DataFrame1[120486,2] ,DataFrame2[65,2])
[1] TRUE
> identical(DataFrame1[120486,3] ,DataFrame2[65,3])
[1] FALSE
> identical(DataFrame1[120486,4] ,DataFrame2[65,4])
[1] TRUE
互いに。誰でもこの問題を引き起こしている可能性があることを教えてもらえますか?前もって感謝します。
編集:ここではdput出力があり、うまくいけば、これはあなたがすべてに言及されたものです。
> dput(droplevels(DataFrame2[65,1:4]))
structure(list(Instrument = structure(1L, .Label = "DTE", class = "factor"),
RecordDate = structure(1L, .Label = "6/4/2012", class = "factor"),
HourMinuteSecond = structure(1L, .Label = "16:10:27", class = "factor"),
MilliSecond = 42L), .Names = c("Instrument", "RecordDate",
"HourMinuteSecond", "MilliSecond"), row.names = 65L, class = "data.frame")
> dput(droplevels(DataFrame1[120486,1:4]))
structure(list(Instrument = structure(1L, .Label = "DTE", class = "factor"),
RecordDate = structure(1L, .Label = "6/4/2012", class = "factor"),
HourMinuteSecond = structure(1L, .Label = "16:10:27", class = "factor"),
MilliSecond = 42L), .Names = c("Instrument", "RecordDate",
"HourMinuteSecond", "MilliSecond"), row.names = 120486L, class = "data.frame")
そして、ここでSTR()出力されます:
> str(DataFrame1)
'data.frame': 317495 obs. of 9 variables:
$ Instrument : Factor w/ 4 levels "CDD","DTE","ERA",..: 1 1 1 1 1 1 1 1 1 1 ...
$ RecordDate : Factor w/ 30 levels "5/18/2012","5/21/2012",..: 1 1 1 1 1 1 1 1 1 1 ...
$ HourMinuteSecond: Factor w/ 21763 levels "10:02:02","10:02:03",..: 14 14 14 17 19 22 24 25 25 25 ...
$ MilliSecond : int 26 57 158 70 73 8 926 448 457 458 ...
$ L1BidPrice : num 6.91 6.91 6.91 6.91 6.91 6.91 6.9 6.9 6.89 6.89 ...
$ L1BidVolume : int 520 504 504 504 504 508 20 4 20 20 ...
$ L1AskPrice : num 6.92 6.92 6.92 6.92 6.92 6.92 6.91 6.91 6.9 6.9 ...
$ L1AskVolume : int 3917 3917 3915 3932 3915 3915 3407 3407 13 30 ...
$ Midquote : num 6.92 6.92 6.92 6.92 6.92 ...
> str(DataFrame2)
'data.frame': 577 obs. of 15 variables:
$ Instrument : Factor w/ 2 levels "DTE","ERA": 1 1 1 1 1 1 1 1 1 1 ...
$ RecordDate : Factor w/ 30 levels "5/18/2012","5/21/2012",..: 1 1 1 1 1 1 2 2 2 2 ...
$ HourMinuteSecond : Factor w/ 317 levels "10:02:10","10:02:21",..: 301 301 301 301 301 301 2 98 129 130 ...
$ MilliSecond : int 45 45 45 45 45 45 485 6 92 300 ...
$ RecordType : Factor w/ 1 level "TRADE": 1 1 1 1 1 1 1 1 1 1 ...
$ Price : num 0.195 0.195 0.195 0.195 0.195 0.195 0.2 0.19 0.19 0.185 ...
$ Volume : int 2686 6350 6350 6350 1620 3064 1 13986 25000 23092 ...
$ UndisclosedVolume: Factor w/ 1 level "\\N": 1 1 1 1 1 1 1 1 1 1 ...
$ DollarValue : num 524 1238 1238 1238 316 ...
$ Qualifiers : Factor w/ 4 levels "\\N","AC","Bi",..: 2 2 2 2 2 2 4 4 3 4 ...
$ BidID : num 6.13e+18 6.13e+18 6.13e+18 6.13e+18 6.13e+18 ...
$ AskID : num 6.13e+18 6.13e+18 6.13e+18 6.13e+18 6.13e+18 ...
$ BidOrAsk : Factor w/ 1 level "\\N": 1 1 1 1 1 1 1 1 1 1 ...
$ BuyerBrokerID : int 229 229 229 229 229 229 236 129 229 112 ...
$ SellerBrokerID : int 297 210 210 210 110 157 229 229 299 229 ...
は 'dput'を使ってここに投稿してください。 'merge'で類似していない2つのレコード – RockScience
多分あなたには要因があり、レベルは同じではありませんか?例えば 'dput(DataFrame2 [65,1:4])'や 'dput(DataFrame2 [65,1:4]))'などの 'dput()'を投稿すると、他の行については)すべてを明確にするでしょう。 – Gregor
両方のフレームで 'str()'を実行すると、第1列では1つのデータフレームが要素として他の文字データ(DTE)または異なるレベルにあり、そして3列目の時は、同じ形になっていますが、異なる時刻形式であったり、さまざまなレベルの要素としてリストされていたりします....それを理解するには 'str()'を使います! – sconfluentus