library( magrittr)
require( dplyr)
require( data.table )
p.combination = character( 10000 )
for ( i in 1 : length( p.combination ) ) {
p.combination [ i] = LETTERS[ sample( 1 : 26 , 5 ) ] %>% paste0( collapse = ", " )
}
p.com .allowed = character( 10000 )
for ( i in 1 : length( p.com .allowed ) ) {
p.com .allowed [ i] = LETTERS[ sample( 1 : 26 , 5 ) ] %>% paste0( collapse = ", " )
}
data = data.frame ( p.combination = p.combination ,
p.com .allowed = p.com .allowed )
player = LETTERS[ 1 : 26 ]
#######################
w2long= function ( array) {
lapply( c( 1 : length( array) ) , function ( i) {
data.table ( "id" = i, "player" = as.character ( array[ i] ) %>%
strsplit( ", " ) %>% .[ [ 1 ] ] )
} ) %>% rbindlist( )
}
out= merge(
w2long( data$p.combination ) %>% mutate( show= 1 ) %>%
dcast( id~player, value.var = "show" ) ,
w2long( data$p.com .allowed ) %>% mutate( show=- 1 ) %>%
dcast( id~player, value.var = "show" ) , by= "id" , suffix= c( "_O" , "_D" )
)
out[ is.na ( out) ] = 0
print( t2- t1) #在我的電腦上是7.42sec
###########################
input.matrix0 = function ( data, player, off) {
X = matrix( ncol = length( player) , nrow = dim( data) [ 1 ] )
for ( i in 1 : dim( data) [ 1 ] ) {
if ( off) {
colnames( X) = paste0( "O_" , player)
coding = 1
pp = data$p.combination
} else {
colnames( X) = paste0( "D_" , player)
coding = - 1
pp = data$p.com .allowed
}
player.temp = pp[ i] %>% gsub( ", " , "|" , .)
index = grep( player.temp , player)
X[ i, index] = coding
X[ i,- index] = 0
}
return ( X)
}
input.matrix = function ( data, player) {
X.off = input.matrix0 ( data, player, T)
X.def = input.matrix0 ( data, player, F)
return ( cbind( X.off , X.def ) )
}
out = input.matrix ( data, player)
print( t4- t3) #在我的電腦上是30.67sec# your code goes here
bGlicmFyeShtYWdyaXR0cikKcmVxdWlyZShkcGx5cikKcmVxdWlyZShkYXRhLnRhYmxlKQogCnAuY29tYmluYXRpb24gPSBjaGFyYWN0ZXIoMTAwMDApCmZvcihpIGluIDE6bGVuZ3RoKHAuY29tYmluYXRpb24pKXsKICBwLmNvbWJpbmF0aW9uW2ldID0gTEVUVEVSU1tzYW1wbGUoMToyNiw1KV0gJT4lIHBhc3RlMChjb2xsYXBzZSA9ICIsICIpCn0KIApwLmNvbS5hbGxvd2VkID0gY2hhcmFjdGVyKDEwMDAwKQpmb3IoaSBpbiAxOmxlbmd0aChwLmNvbS5hbGxvd2VkKSl7CiAgcC5jb20uYWxsb3dlZFtpXSA9IExFVFRFUlNbc2FtcGxlKDE6MjYsNSldICU+JSBwYXN0ZTAoY29sbGFwc2UgPSAiLCAiKQp9CiAKZGF0YSA9IGRhdGEuZnJhbWUocC5jb21iaW5hdGlvbiA9IHAuY29tYmluYXRpb24sIAogICAgICAgICAgICAgICAgICBwLmNvbS5hbGxvd2VkID0gcC5jb20uYWxsb3dlZCkKcGxheWVyID0gTEVUVEVSU1sxOjI2XQogCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKdDE9U3lzLnRpbWUoKQogCncybG9uZz1mdW5jdGlvbihhcnJheSl7CglsYXBwbHkoYygxOmxlbmd0aChhcnJheSkpLGZ1bmN0aW9uKGkpIHsKCWRhdGEudGFibGUoImlkIj1pLCJwbGF5ZXIiPWFzLmNoYXJhY3RlcihhcnJheVtpXSkgJT4lCglzdHJzcGxpdCgiLCAiKSAlPiUgLltbMV1dKQoJfSkgJT4lIHJiaW5kbGlzdCgpCn0KIApvdXQ9bWVyZ2UoCncybG9uZyhkYXRhJHAuY29tYmluYXRpb24pICU+JSBtdXRhdGUoc2hvdz0xKSAlPiUKZGNhc3QoaWR+cGxheWVyLHZhbHVlLnZhcj0ic2hvdyIpLAp3MmxvbmcoZGF0YSRwLmNvbS5hbGxvd2VkKSAlPiUgbXV0YXRlKHNob3c9LTEpICU+JQpkY2FzdChpZH5wbGF5ZXIsdmFsdWUudmFyPSJzaG93IiksYnk9ImlkIixzdWZmaXg9YygiX08iLCJfRCIpCikKb3V0W2lzLm5hKG91dCldPTAKIAogCnQyPVN5cy50aW1lKCkKcHJpbnQodDItdDEpICPlnKjmiJHnmoTpm7vohabkuIrmmK83LjQyc2VjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCnQzPVN5cy50aW1lKCkKIAppbnB1dC5tYXRyaXgwID0gZnVuY3Rpb24oZGF0YSwgcGxheWVyLCBvZmYpewogIFggPSBtYXRyaXgobmNvbCA9IGxlbmd0aChwbGF5ZXIpLCBucm93ID0gZGltKGRhdGEpWzFdKQogIGZvcihpIGluIDE6ZGltKGRhdGEpWzFdKXsKICAgIGlmKG9mZikgewogICAgICBjb2xuYW1lcyhYKSA9IHBhc3RlMCgiT18iLHBsYXllcikKICAgICAgY29kaW5nID0gMQogICAgICBwcCA9IGRhdGEkcC5jb21iaW5hdGlvbgogICAgfSBlbHNlIHsKICAgICAgY29sbmFtZXMoWCkgPSBwYXN0ZTAoIkRfIixwbGF5ZXIpCiAgICAgIGNvZGluZyA9IC0xCiAgICAgIHBwID0gZGF0YSRwLmNvbS5hbGxvd2VkCiAgICB9CiAgICBwbGF5ZXIudGVtcCA9IHBwW2ldICU+JSBnc3ViKCIsICIsICJ8IiwuKQogICAgaW5kZXggPSBncmVwKHBsYXllci50ZW1wLCBwbGF5ZXIpCiAgICBYW2ksaW5kZXhdID0gY29kaW5nCiAgICBYW2ksLWluZGV4XSA9IDAKICB9CiAgcmV0dXJuKFgpCn0KIAppbnB1dC5tYXRyaXggPSBmdW5jdGlvbihkYXRhLCBwbGF5ZXIpewogIFgub2ZmID0gaW5wdXQubWF0cml4MChkYXRhLCBwbGF5ZXIsIFQpCiAgWC5kZWYgPSBpbnB1dC5tYXRyaXgwKGRhdGEsIHBsYXllciwgRikKICByZXR1cm4oY2JpbmQoWC5vZmYsIFguZGVmKSkKfQogCm91dCA9IGlucHV0Lm1hdHJpeChkYXRhLHBsYXllcikKIAp0ND1TeXMudGltZSgpCnByaW50KHQ0LXQzKSAj5Zyo5oiR55qE6Zu76IWm5LiK5pivMzAuNjdzZWMjIHlvdXIgY29kZSBnb2VzIGhlcmU=