gpt4 book ai didi

R分组/聚合,其中条件涉及表中的其他行,而不仅仅是当前行

转载 作者:行者123 更新时间:2023-12-04 06:29:46 26 4
gpt4 key购买 nike

使用 R,我可以在跨越多行的条件下聚合行的最佳方式是什么。例如,聚合 n 次或更多次 z = 0 的任何行。

在 n = 3 的以下示例表上运行会是什么样子。

示例表 x:

x   y   z
0 0 6
5 5 0
40 2 0
4 0 0
10 0 1
0 0 2
11 7 0
0 4 0
0 0 0
0 0 0
0 0 2
18 0 4

结果表:

x   y   z
0 0 6
49 7 0 <- Above two rows got aggregated
10 0 1
0 0 2
11 11 0 <- Above three rows got aggregated
0 0 2
18 0 4

最佳答案

由于您似乎仍处于“学习阶段”,我想到了一个使用 plyr 的示例包会有帮助。 plyr 是一个非常方便的库,它允许您以灵活(简洁——如下所示)的方式对数据集进行切片/切 block 并总结它们的子组,因此可能值得您花时间去了解。如果您发现自己需要对超大数据集执行类似操作,您也可以考虑查看 data.table包。

我假设您已经使用 Roman 的 textConnection 技巧将您的数据放入名为 mmf 的 data.frame 中。我正在向 mmf 添加一个 idx 列,这样您就可以对其进行子集化并逐组处理结果:

library(plyr)
# mmf <- read.table(textConnection( ...
rle.idx <- rle(mmf$z)
mmf$idx <- rep(seq(RLE$lengths), RLE$lengths)
ans <- ddply(mmf, .(idx), colwise(sum))

ans 看起来像:

 x  y z idx
0 0 6 1
49 7 0 6
10 0 1 3
0 0 2 4
11 11 0 20
0 0 2 6
18 0 4 7

只需删除 idx 列即可,例如:

ans <- ans[, -4]

关于R分组/聚合,其中条件涉及表中的其他行,而不仅仅是当前行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6543588/

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