我有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与数据帧具有相同的结构,但它包含了我所有数据帧的所有数据!
答案 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')]
我希望这会有所帮助。否则,如果你以某种方式上传文件样本会使事情变得更容易。
由于