gpt4 book ai didi

R ffdfdply 分割问题

转载 作者:行者123 更新时间:2023-12-02 20:45:40 26 4
gpt4 key购买 nike

我对 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

我们可以在“split”下包含多个列吗?如果有人也提供一个例子,那就太好了。

谢谢。

<小时/>

@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)

如果您想分割两列,只需创建一个合并两列的新列并将其用作分割即可。请参阅 ?ikey 创建该列

关于R ffdfdply 分割问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17784484/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com