r - 如何通过数据框中的简单条件对两行求和
问题描述
我想将 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 之后……
关于我该怎么做的任何提示?
解决方案
我想我明白其中的逻辑。您希望从 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)
推荐阅读
- vim - vim配色方案不呈现背景颜色
- google-api-nodejs-client - Google youtube api 示例:在哪里粘贴身份验证代码?
- nullpointerexception - 猫王运算符与非空断言:这些语句之间的区别?
- neural-network - 为什么我的神经网络总是预测相同的输出?(突触.js)
- php - 渲染 twitter 标准搜索 api
- html - 只能使用来自同一个表的数据进行依赖选择吗?
- java - 无法在屏幕旋转时保留菜单项
- rx-java - 我可以捆绑在 Rxjava2 中的功能时间间隔内发布的项目吗?
- batch-file - For循环批处理文件中的字符串左和中操作
- android - 在Android上读取MIFARE Classic卡时如何防止密钥泄露?