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]
 
#######################
 
t1=Sys.time()
 
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
 
 
t2=Sys.time()
print(t2-t1) #在我的電腦上是7.42sec
###########################
 
t3=Sys.time()
 
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)
 
t4=Sys.time()
print(t4-t3) #在我的電腦上是30.67sec# your code goes here