myuniq <- function ( df) {
if ( NROW( df) < 2 ) {
return ( df)
} else {
uniq=! apply( apply( df, 2 , "%in%" , df[ 1 , ] ) , 1 , any)
return ( rbind( df[ 1 , ] , myuniq( df[ uniq, ] ) ) )
}
}
another_unique <- function ( df) {
if ( nrow( df) < 2 ) {
return ( df)
}
list_x = c( df$x)
list_y = c( df$y)
list_all = c( )
list_x_new = c( )
list_y_new = c( )
for ( x in 1 : length( list_x) ) {
if ( list_x[ x] % in% list_all | list_y[ x] % in% list_all) {
} else {
list_all = c( list_all, list_x[ x] , list_y[ x] )
list_x_new = c( list_x_new, list_x[ x] )
list_y_new = c( list_y_new, list_y[ x] )
}
}
return ( data.frame ( x= list_x_new, y= list_y_new) )
}
set.seed ( 123456 )
n= 10000
df= data.frame ( x= sample( 1 : 500 , n, replace = T)
, y= sample( 1 : 500 , n, replace = T) )
# 測測看
new_df_a <- another_unique( df)
print
( paste
( 'another_unique:' , Sys.
time ( ) - ss
) ) summary( new_df_a)
# showfeb大範例
new_df <- myuniq( df)
print
( paste
( 'myuniq:' , Sys.
time ( ) - ss
) ) summary( new_df)
print( sum( new_df_a == new_df) / 2 == nrow( new_df) )
bXl1bmlxIDwtIGZ1bmN0aW9uKGRmKXsKICBpZihOUk9XKGRmKTwyKXsKICAgIHJldHVybihkZikKICB9IGVsc2UgewogICAgdW5pcT0hYXBwbHkoYXBwbHkoZGYsMiwiJWluJSIsZGZbMSxdKSwxLGFueSkKICAgIHJldHVybihyYmluZChkZlsxLF0sbXl1bmlxKGRmW3VuaXEsXSkpKQogIH0KfQoKYW5vdGhlcl91bmlxdWUgPC0gZnVuY3Rpb24oZGYpewogIGlmKG5yb3coZGYpPDIpewogICAgcmV0dXJuKGRmKQogIH0gCiAgCiAgbGlzdF94ID0gYyhkZiR4KQogIGxpc3RfeSA9IGMoZGYkeSkKICBsaXN0X2FsbCA9IGMoKQogIGxpc3RfeF9uZXcgPSBjKCkKICBsaXN0X3lfbmV3ID0gYygpCiAgZm9yKHggaW4gMTpsZW5ndGgobGlzdF94KSl7CiAgICBpZihsaXN0X3hbeF0gJWluJSBsaXN0X2FsbCB8IGxpc3RfeVt4XSAlaW4lIGxpc3RfYWxsKXsKICAgICAgCiAgICB9ZWxzZXsKICAgICAgbGlzdF9hbGwgPSBjKGxpc3RfYWxsLCBsaXN0X3hbeF0sIGxpc3RfeVt4XSkKICAgICAgbGlzdF94X25ldyA9IGMobGlzdF94X25ldywgbGlzdF94W3hdKQogICAgICBsaXN0X3lfbmV3ID0gYyhsaXN0X3lfbmV3LCBsaXN0X3lbeF0pCiAgICB9CiAgfQogIHJldHVybihkYXRhLmZyYW1lKHg9bGlzdF94X25ldywgeT1saXN0X3lfbmV3KSkKCn0KCnNldC5zZWVkKDEyMzQ1NikKbj0xMDAwMApkZj1kYXRhLmZyYW1lKHg9c2FtcGxlKDE6NTAwLG4scmVwbGFjZSA9IFQpCiAgICAgICAgICAgICAgLHk9c2FtcGxlKDE6NTAwLG4scmVwbGFjZSA9IFQpKQoKCiMg5ris5ris55yLCnNzIDwtIFN5cy50aW1lKCkKbmV3X2RmX2EgPC0gYW5vdGhlcl91bmlxdWUoZGYpCnByaW50KHBhc3RlKCdhbm90aGVyX3VuaXF1ZTonLCBTeXMudGltZSgpIC0gc3MpKQpzdW1tYXJ5KG5ld19kZl9hKQoKIyBzaG93ZmVi5aSn56+E5L6LCnNzIDwtIFN5cy50aW1lKCkKbmV3X2RmIDwtIG15dW5pcShkZikKcHJpbnQocGFzdGUoJ215dW5pcTonLCBTeXMudGltZSgpIC0gc3MpKQpzdW1tYXJ5KG5ld19kZikKCnByaW50KHN1bShuZXdfZGZfYSA9PSBuZXdfZGYpIC8gMiA9PSBucm93KG5ld19kZikpCg==