0

ff データフレーム windows_ff があります。

    edge      ipaddr        port    protocol windowed_qd       class
1 1182430570  41.2.194.42 1299        1           0           WEB        
2 1182430570  41.2.194.42 1302        1           0           WEB        

その行間の相互関係を見つけたいので、そのデータフレームの正確なコピーを作成することにしました。

outgoing_windows_ff_1 <- ffdf(edge=outgoing_windows_ff$edge, 
                                      ipaddr=outgoing_windows_ff$ipaddr,
                                      influencing_port=outgoing_windows_ff$port,
                                      influencing_proto=outgoing_windows_ff$proto,
                                      influencing_class=outgoing_windows_ff$class)

次に、2 つのデータフレームをマージします。

merged <- merge(x=outgoing_windows_ff, y=outgoing_windows_ff_1, 
                        by.x=c('edge','ipaddr'),by.y=c('edge','ipaddr') )

結果は次のとおりです。

  edge      ipaddr        port    protocol windowed_qd       class influencing_port
1 1182430570  41.2.194.42 1299        1           0           WEB              1299       
2 1182430570  41.2.194.42 1302        1           0           WEB              1299       

しかし、結果に4行が期待されるので、それは間違っています。

通常のデータフレーム間のマージを行う:

merged <- merge(x=as.data.frame(outgoing_windows_ff), 
                        y=as.data.frame(outgoing_windows_ff_1), 
                        by.x=c('edge','ipaddr'),by.y=c('edge','ipaddr') )

正しい結果が得られます:

        edge      ipaddr port protocol windowed_qd class influencing_port influencing_proto
1 1182430570 41.2.194.42 1299        1           0   WEB             1299                 1
2 1182430570 41.2.194.42 1299        1           0   WEB             1302                 1
3 1182430570 41.2.194.42 1302        1           0   WEB             1299                 1
4 1182430570 41.2.194.42 1302        1           0   WEB             1302                 1

ffデータフレームまたは「通常のデータフレーム」が使用されている場合、特定の操作で2つの異なる結果が得られるのは本当に危険だと思います。これは有害な結果につながる可能性があり、実験者はそれについて知ることができません。私の疑問は次のとおりです。

4

1 に答える 1

0

使用している関数であるパッケージ ffbase の merge.ffdf のドキュメントを読みましたか?

それは言います:

このメソッドは、基本パッケージのマージと似ていますが、内部結合と左外部結合のみを許可します。結合が ffmatch または ffdfmatch に基づいて行われることをマークします。つまり、y の *最初の*要素のみがx に追加され、ffdfmatch は link[base]{ paste }-ing でキーをまとめて機能します。そのため、キーに vmode double の列が含まれている場合、これは適していない可能性があります。

強調表示されているものを太字でマークします。merge.ffdf で行っていることは、 merge.ffdf でサポートされていない完全な外部結合ですドキュメントで「最初」という単語をマークします。また、キーを一緒に貼り付けていることを示します。

完全外部結合を実行するコードが必要な場合は、ffbase の github リポジトリの ff オブジェクトで機能する完全外部結合を実行するコードを自由にプッシュしてください: https://github.com/edwindj/ffbase

于 2013-06-05T13:49:26.887 に答える