使代码更快

时间:2013-11-19 13:47:43

标签: r

我有两个不同长度的数据集“咨询”和“详细信息”(咨询约100万行,详细信息是~350K行 - 每个数据集20个变量),其中有一列(ref)允许我交叉链接这两个数据集。 代码的意思是在参考$ id中提取值,其中参考$ ref等于详细信息$ ref

我写了这个:

x <- as.character(levels(factor(details$ref)))
case<- character(0)
system.time( for(i in 1:length(x)){
case[i]<- as.character(consult$id[ consult$ref==x[i] ][1])
} )

我也试过

x <- as.character(levels(factor(details$ref)))
case<- list()
system.time( for(i in 1:length(x)){
  case[[i]]<- as.character(consult$id[ consult$ref==x[i] ] )
} )

但是运行时几乎相同(x [1:100]约为15秒)。 我知道数据集有点大,但是整个数据集需要大约14-15个小时,这看起来有点过分。我可以让它在一夜之间运行(虽然这样的数据集很少,但最终会花费我的年龄) - 这似乎是浪费时间,并希望有人可以建议更快的方式来做到这一点。 非常感谢! 马可

1 个答案:

答案 0 :(得分:0)

怎么样:

consult[consult$ref%in%details$ref, "id"]