首页 > 解决方案 > 如何通过数据框中的简单条件对两行求和

问题描述

我想将 2 行 2 行相加,以研究某些变量的滞后。

假设我有以下数据库:

> SE eggs
  4  2.0
  6  4.0
  7 10.0
  8  0.5
  5  1.0
  1  3.0
  2  6.0
  3  9.0

因此,我希望获得以下内容,eggs索引“SE”的总和在哪里:

> df
    SE2    eggs
  "4+5"    3
  "6+7"    14
  "8+1"    3.5
  "2+3"    15

在哪里

df = data.frame(SE=c(4,6,7,8,5,1,2,3),eggs = c(2,4,10,0.5,1,3,6,9))

Obs.:不要考虑数据框的顺序,但我需要从某个数字(在本例中为数字 4)开始,然后取下一个数字,在本例中为数字 5,并保持此逻辑。在 SE 6+7、SE 8+1、SE 2+3 之后……

关于我该怎么做的任何提示?

标签: rdatabasedataframesum

解决方案


我想我明白其中的逻辑。您希望从 4 开始递增数字。当这些数字达到 8(或 SE 的最大值)时,它们会回绕回 1 并继续递增,直到所有数字都用完。

然后,您将这些数字分组为连续对。

对于每对数字,您可以找到具有 SE 匹配值的数据框行。这些行包含您希望求和的两个鸡蛋值。

df = data.frame(SE=c(4,6,7,8,5,1,2,3),eggs = c(2,4,10,0.5,1,3,6,9))

first <- 4
i <- match(df$SE, c(first:nrow(df), seq(first - 1)))
groups <- ((seq_along(i) + 1) %/% 2)[i]

do.call(rbind, lapply(split(df, groups), function(x) {
  data.frame(SE = paste(x$SE, collapse = "+"), eggs = sum(x$eggs))}))
#>    SE eggs
#> 1 4+5  3.0
#> 2 6+7 14.0
#> 3 8+1  3.5
#> 4 2+3 15.0

reprex 包于 2020-02-17 创建(v0.3.0)


推荐阅读