我正在寻找一种快速的方法来做"不加入"(即保持不合并的行,或内部联接的反向).我一直在做的方法是使用data.table for X和Y,然后设置key.例如:
require(data.table)
X <- data.table(category = c('A','B','C','D'), val1 = c(0.2,0.3,0.8,0.7))
Y <- data.table(category = c('B','C','D','E'), val2 = c(2,3,5,7))
XY <- merge(X,Y,by='category')
> XY
category val1 val2
1: B 0.3 2
2: C 0.8 3
3: D 0.7 5
Run Code Online (Sandbox Code Playgroud)
但我需要反过来,所以我必须这样做:
XY_All <- merge(X,Y,by='category',all=TRUE)
setkey(XY,category)
setkey(XY_All,category)
notXY <- XY_All[!XY] #data.table not join (finally)
> notXY
category val1 val2
1: A 0.2 NA
2: E NA 7
Run Code Online (Sandbox Code Playgroud)
我觉得这很长篇大论(特别是来自data.frame).我错过了什么吗?
编辑:我在考虑了更多关于不加入之后得到了这个
X <- data.table(category = c('A','B','C','D'), val1 = c(0.2,0.3,0.8,0.7),key = "category")
Y <- …Run Code Online (Sandbox Code Playgroud) 我正在使用ff/ffdf和ffdfdply函数"错误:无法分配大小... MB的向量"问题.
我正在尝试使用ff和ffdf包来处理已经键入组的大量数据.数据(以ffdf表格式)如下所示:
x =
id_1 id_2 month year Amount key
1 13 1 2013 -200 11
1 13 2 2013 300 54
2 19 1 2013 300 82
3 33 2 2013 300 70
.... (10+ Million rows)
Run Code Online (Sandbox Code Playgroud)
使用以下内容创建唯一键:
x$key = as.ff(as.integer(ikey(x[c("id_1","id_2","month","year")])))
Run Code Online (Sandbox Code Playgroud)
要通过使用键变量进行分组来总结,我有以下命令:
summary = ffdfdply(x=x, split=x$key, FUN=function(df) {
df = data.table(df)
df = df[,list(id_1 = id_1[1], withdraw = sum(Amount*(Amount>0),na.rm=T), by = "key"]
df
},trace=T)
Run Code Online (Sandbox Code Playgroud)
使用data.table的优秀分组功能(从这个讨论中获得的想法).在实际代码中有更多的函数要应用于Amount变量,但即使这样我也无法处理完整的ffdf表(表的一个较小的子集工作正常).
似乎ffdfdplyis使用了大量的ram,给出了:
Error: cannot allocate vector of size 64MB
Run Code Online (Sandbox Code Playgroud)
BATCHBYTES似乎没有帮助.任何有ffdffply经验的人都可以推荐任何其他方法来解决这个问题,而无需预先将ffdf表拆分成块?