2013-06-05 1 views
0

У меня есть след dataframe windows_ff:merge.ffdf неправильного результата, если несколько столбцов совпадают в R

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   

Я хочу найти взаимное соотношение между рядами, так что я решил сделать точную копию этого dataframe :

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 dataframes:

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 строки в результате.

Выполнение слияния между нормальными dataframes:

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 

Я думаю, что это действительно опасно, что определенная операция дает 2 разные результаты, если и след dataframes или " нормальные данные ". Это может привести к отравленным результатам, и экспериментатор не может знать об этом. Я сомневаюсь: «Возможно, другие результаты, которые я получил с пакетом ff, отравлены, и я не понял»

ответ

0

Прочитали ли вы документацию merge.ffdf из пакета ffbase, которая является функцией, которую вы используете?

Он говорит:

Этот метод аналогичен, как слияние в базовом пакете, но позволяет только внутренние и внешние соединения оставили. Марк, что присоединение осуществляется на основе ffmatch или ffdfmatch, а это означает, что только * первого * элемента у будет добавлена ​​к й и ffdfmatch работу по ссылке [базовой] {пасты} -ный вместе ключ. Поэтому это может не подойти, если ваш ключ содержит столбцы vmode double.

Отметьте выделение жирным шрифтом. Что вы делаете с merge.ffdf - это полное внешнее соединение, которое не поддерживается merge.ffdf. Отметьте слово 'first' в документации. Также отметьте, что это вставить 's вместе ключ.

Если вы нуждаетесь в коде, который выполняет полное внешнее соединение, не стесняйтесь нажать код, который делает присоединиться полное внешнее, которое работает на объектах и ​​след в хранилище GitHub из ffbase: https://github.com/edwindj/ffbase

Смежные вопросы