查找r中其他数据帧中一组两列数据帧的出现次数

时间:2014-07-11 05:43:54

标签: r count find-occurrences

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

我已经编写了代码,但速度非常慢!

我将所有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与数据帧具有相同的结构,但它包含了我所有数据帧的所有数据!

1 个答案:

答案 0 :(得分: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')]

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

由于