簡體   English   中英

R ffdfdply拆分問題

[英]R ffdfdply split issue

我對R,ffdfdply函數有疑問

a=as.ffdf(data.frame(b=11:20,c=c(4,4,4,4,4,5,5,5,5,5), d=c(1,1,1,0,0,0,1,0,1,1)))

ffdfdply(a, split=a$c, FUN= function(x) {data.frame(cumsum(x$d))}, trace=T)

它生成的輸出只是一個累加和,而不考慮拆分標准。

我需要這樣的輸出

c   cumsum
4    1
4    2
4    3
4    4
4    4
5    0
5    1
5    1
5    2
5    3

我們可以在“拆分”下包含多個列嗎? 如果有人也提供示例,那就太好了。

謝謝。


@jwijffels,我會在其他數據集上測試您的解決方案

i=as.ffdf(data.frame(a=c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2), b=c(1,4,6,2,5,3,1,4,3,2,8,7,1,3,5,4,2,6,3,1,2), c=c(1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2), d=c(1,0,1,1,0,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0)))

我收到的輸出不正確。 我需要在列a和c的基礎上累積d列的總和。

下面的步驟是正確的,並給出了正確的結果

idx <- ffdforder(i[c("a","c","b")])
ordered_i <- i[idx, ]
ordered_i$key_a_c <- ikey(ordered_i[c("a", "c")])

但是當我嘗試累計總和時,得到了錯誤的結果。

cumsum_i <- ffdfdply(ordered_i, split=as.character(ordered_i$key_a_c), FUN= function(x) {
    ## Data in RAM, on which you can use data.table
    x <- as.data.table(x)
    result <- x[, cumsum_a_c := cumsum(x$d), by = list(key_a_c)]
    as.data.frame(result)
}, trace=T)

請幫忙。 我需要在大數據上運行這些命令集。

正確的用法是這樣

require(ffbase)
require(data.table)
a=as.ffdf(data.frame(b=11:20,c=c(4,4,4,4,4,5,5,5,5,5), d=c(1,1,1,0,0,0,1,0,1,1)))
ffdfdply(a, split=as.character(a$c), FUN= function(x) {
  ## Data in RAM, on which you can use data.table
  x <- as.data.table(x)
  result <- x[, cumsum := cumsum(d), by = list(c)]
  as.data.frame(result)
  }, trace=T)

如果要按2列拆分,只需將兩列合並為一個新列,然后將其用作拆分即可。 請參閱?ikey以創建該列

?ffdfdply閱讀幫助在這里有所幫助

此功能實際上不會拆分數據。 為了減少拆分級別很多的情況下數據放入RAM的次數,該函數根據BATCHBYTES提取可放入RAM的拆分元素組。

和....

請確保您的FUN涵蓋以下事實:在應用FUN的一個數據塊中可以包含多個拆分元素。

因此,從我的閱讀中,您實際上需要有一個拆分組合樣式的函數,該函數也可以在ffdfdply調用的函數中的組上工作。 像這樣使用ave

a$c <- with(a, as.integer(c))
ffdfdply(
    a,
    split=a$c,
    function(x) data.frame(c=x$c,cumsum=ave(x$d,x$c,FUN=cumsum)), 
    trace=T
)

結果:

   c cumsum
1  4      1
2  4      2
3  4      3
4  4      3
5  4      3
6  5      0
7  5      1
8  5      1
9  5      2
10 5      3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM