小编tan*_*ach的帖子

R中的"不加入"

我正在寻找一种快速的方法来做"不加入"(即保持不合并的行,或内部联接的反向).我一直在做的方法是使用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)

merge r inner-join outer-join data.table

4
推荐指数
2
解决办法
2227
查看次数

R中的ffdfdply,分裂和内存限制

我正在使用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表拆分成块?

memory grouping r ffbase data.table

2
推荐指数
1
解决办法
825
查看次数

标签 统计

data.table ×2

r ×2

ffbase ×1

grouping ×1

inner-join ×1

memory ×1

merge ×1

outer-join ×1