1

我有 103 个数据框,其中包含 7 个变量和 1000 多行。我想在其他 102 个数据帧中找到一个数据帧的一对两列的出现次数。换句话说,c(V1,V2)在其他 102 个数据帧中可以看到一起多少次(= 一个数据帧的两列一起)。

我已经写了一个代码,但是速度很慢!

我将所有 103 个数据框放在一个列表中,并将其转换为数据框。然后做一个for循环,逐一读取每个数据帧。并且在每个循环中,我都有另一个 for 循环来搜索该列表中数据框的每一行!

代码的主要部分如下:

    for(i in file){
         input<-read.table(i)

         for(j in 1:1000){
            df1<- data.table(input[j,c(1,3)]) 
            count<-merge(df1,dt, c("V1", "V3")) //dt is a data frame includes all 103 data frames
            df1["count"]<-nrow(count)
       }
    }

这样,我可以计算一个数据帧的V1和V3集合有多少次进入其他数据帧。但获得全部结果需要50多天!

我想知道是否有人可以帮助我以更快的方式获得我想要的结果。


数据框示例(此处仅考虑 5 个变量):

 V1    V2  V3   V4  V5 
 1     Q0  abc  34  3
 1     Q0  abd  31  9
 1     Q0  bac  32  3
 1     Q0  cba  56  0
 2     Q0  zxc  37  3
 2     Q0  fgc  30  3
 2     Q0  ghc  36  3

事实上,我想知道 V3 的每个值有多少次出现在其他数据帧中,但因为 V3 和 V1 是相互依赖的。我也必须在搜索中考虑 V1。所以,我必须看看有多少次c(V1,V3)出现在其他数据框中。例如 (1,abc) 一起!或 (1, abd)。

dt 具有与数据帧相同的结构,但它包含来自我拥有的所有数据帧的所有数据!

4

1 回答 1

0

我会尝试回答,但坦率地说,我不确定我是否理解您的问题。您也没有提供足够的数据供我们处理,因此很难找到解决您问题的方法。然而,事情就这样过去了。我已经注释掉了可能有问题的行并使用了我自己的一些。如果这能让你更接近,我将很乐意提供进一步的帮助。

V=vector("list",length(file))
cnt=1;
for(i in file){
     #input<-read.table(i)

     # Use fread to read the file. It is vert fast
     dt<-fread(i)[,c(1,3), with=FALSE]
     # Create a dummy column which we will sum eventually
     dt[,VAL:=1] #
     #dt<-merge(dt,df1, by=c('V1','V3'),all.x=TRUE)

     # Add in the list-vector to create the big data.table in the end
     V[[cnt]]=dt;
     cnt=cnt+1

 # You don't need a for-loop to merge line by line.
 #for(j in 1:1000){
      #df1<- data.table(input[j,c(1,3)]) 
      #count<-merge(df1,dt, c("V1", "V3")) //dt is a data frame includes all 103 data frames
      #df1["count"]<-nrow(count)
 #}
}

# Create a big data.table
V<-rbindlist(V);

#Aggregate on V1 and V3 and see how many lines are there.
V[,lapply(.SD,sum,na.rm=TRUE),by=c('V1','V3')]

我希望这有帮助。否则,如果您以某种方式上传文件样本,这会使事情变得更容易。

谢谢

于 2014-12-18T10:21:15.647 回答