hqs811 发表于 2014-8-21 20:42 
谢谢回复
肉眼识别稍微困难了一点..虽然这是在R里,你愿意分享一下R的program吗?
####################################################################
##### 模拟数据
#################################################################
Title=paste0("title",1:30)
names=paste0(rep(letters,9),1:9)
author.names=function(n){ ####随机生成单篇文章作者
NAMES=sort(sample(names,size=n,replace=FALSE))
paste(NAMES,"",sep="",collapse=" | ")
}
v.a.n=function(n){ ####向量化生成多篇文章作者
sapply(n,author.names)
}
Author.num=sapply(1:30,function(o){sample(1:9,size=1)})
Author.names=v.a.n(Author.num)
dat=data.frame(title=Title,author_names=Author.names,author_num=Author.num)
##############################################################################
#######################################################################
##### Data preparation
#####################################################################
mynames=function(name){unlist(strsplit(name," \\| "))} ## "|"要用转义字符表示
v.names=function(names){lapply(names,mynames)}
namebook=v.names(Author.names)
LEN=nrow(dat)
author_at_least.list=lapply(1:LEN,function(o){rep(0,5)})
for(i in 1:LEN){
name=namebook[
]
ind=(1:LEN)[-i]
re_names=sapply(ind,function(k){sum(!is.na(match(name,namebook[[k]])))})
n=min(5,max(re_names))
if(n!=0) author_at_least.list[][1:n]=1
}
author_at_least.matrix=matrix(unlist(author_at_least.list),byrow=TRUE,ncol=5)
colnames(author_at_least.matrix)=paste0("at_least",1:5)
mdata=cbind(dat,author_at_least.matrix)
mdata