求问各位大佬一个关于如何融合dataframe的问题。我现在有两个dataframe:
a<-data.frame(time=c("2018-07-16 10:15:40 CST", "2018-07-16 10:15:43 CST"....), User.id=c(1,2,....), v1, v2...)
b<-data.frame(start.time=c("2018-07-16 10:15:39 CST", "2018-07-16 10:15:42 CST"....), end.time=c("2018-07-16 10:15:41 CST", "2018-07-16 10:15:45 CST"....), user.id=c(1,2,...), v1, v2...)
也即是a中有User.id,time,和其他变量。time是一个时间点。b中有与a中相对应的user.id,以及一个行为的开始(start.time)和结束时间(end.time),以及其他变量。a,b都有十个左右的变量。现在希望能够将按照两个条件将两个两个dataframe融合成一个。一个条件是a和b中userid相等,另一个是a中的time时间点要大于等于b中的开始时间且小于b中的结束时间。
想问问各位大佬有没有比较高效的融合这两个dataframe的方式?
关于内存和上边这个问题:
为了解决上面这个问题,在之前数据量比较小的时候,我是用dplyr包中的left_join来实现这个功能的:
mdata<- a %>%
left_join(b,by=c("User.id"="user.id")) %>%
filter(time >= start_time, time <end_time)
但是现在a的数据量达到几万obs,b达到几千obs,就会报错:
错误: 矢量内存用完了(达到了极限?)
查了一下英文是:vector memory exhausted (limit reached?)
然后想问问各位大佬怎么解决这个内存问题。作为没怎么敲过各种代码的纯萌新,想到的可能出现的问题有两个方面:一个是上面问的有没有更好的解决融合两个dataframe的方法。虽然我没仔细想,但是总觉得现在的做法可能不太对,因为即使不考虑后面的时间,只是按照id来left_join也很难对几万条数据来匹配(按理说几万条不应该吧)。再一个就是系统本身的内存问题。我用的mac是16G内存的。但是不太懂os系统,不知道r分配的内存是多少,网上也只查到了windows系统下怎么分配内存。所以也想问问各位大佬,mac下是否需要给r设置内存?
我用的是免费版的rstudio,r的版本信息如下:
sessionInfo()
R version 3.5.0 (2018-04-23)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.3
谢谢各位啦!